From 6f086ae46bcdf0d12922b25d939b1b5ace0ccad0 Mon Sep 17 00:00:00 2001 From: Christopher Serr Date: Sun, 4 Aug 2019 17:47:51 +0200 Subject: [PATCH] Implement Support for no_std sid doesn't actually need std. It can just use core + alloc. --- Cargo.toml | 2 +- src/id.rs | 8 ++++---- src/id_list.rs | 7 ++++--- src/id_range.rs | 8 ++++---- src/id_vector.rs | 12 ++++++------ src/lib.rs | 30 ++++++++++++++++-------------- 6 files changed, 35 insertions(+), 32 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d53dd11..c45a182 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,4 @@ repository = "https://github.com/nical/sid" name = "sid" [dependencies] -num-traits = "0.2" +num-traits = { version = "0.2", default-features = false } diff --git a/src/id.rs b/src/id.rs index dfd6de6..5c4b889 100644 --- a/src/id.rs +++ b/src/id.rs @@ -1,8 +1,8 @@ use {IdRange, IntegerHandle, Identifier, FromUsize, ToUsize}; -use std::marker::PhantomData; -use std::fmt; -use std::ops::{Add, Sub}; -use std::hash::{Hash, Hasher}; +use core::marker::PhantomData; +use core::fmt; +use core::ops::{Add, Sub}; +use core::hash::{Hash, Hasher}; use num_traits::One; #[repr(C)] diff --git a/src/id_list.rs b/src/id_list.rs index ddf3390..4cafe2a 100644 --- a/src/id_list.rs +++ b/src/id_list.rs @@ -1,6 +1,7 @@ use super::{Identifier, FromUsize}; -use std::marker::PhantomData; -use std::ops; +use core::marker::PhantomData; +use core::ops; +use alloc::vec::Vec; /// A trait that defines how to choose the null (or invalid) Id. pub trait NullId { @@ -237,7 +238,7 @@ struct MagicValue; #[cfg(test)] impl NullId for MagicValue { fn null_id() -> TestId { - return FromUsize::from_usize(::std::u32::MAX as usize); + return FromUsize::from_usize(::core::u32::MAX as usize); } } diff --git a/src/id_range.rs b/src/id_range.rs index c8f925b..f54fc80 100644 --- a/src/id_range.rs +++ b/src/id_range.rs @@ -1,8 +1,8 @@ use {Id, IntegerHandle, FromUsize}; -use std::marker::PhantomData; -use std::fmt; -use std::ops; -use std::cmp; +use core::marker::PhantomData; +use core::fmt; +use core::ops; +use core::cmp; use num_traits::Zero; pub struct IdRange { diff --git a/src/id_vector.rs b/src/id_vector.rs index 4e79bd4..ae096b1 100644 --- a/src/id_vector.rs +++ b/src/id_vector.rs @@ -1,10 +1,10 @@ use {Identifier, FromUsize, ToUsize, IdRange}; -use std::default::Default; -use std::slice; -use std::vec; -use std::marker::PhantomData; -use std::ops; -use std::iter::IntoIterator; +use core::default::Default; +use core::slice; +use alloc::{vec, vec::Vec}; +use core::marker::PhantomData; +use core::ops; +use core::iter::IntoIterator; use num_traits::Zero; /// Similar to Vec except that it is indexed using an Id rather than an usize index. diff --git a/src/lib.rs b/src/lib.rs index 5ef1560..e9f24bd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,18 +1,21 @@ +#![no_std] + +extern crate alloc; extern crate num_traits; -use std::cmp; -use std::ops::{Add, Sub}; -use num_traits::{Zero, One}; +use num_traits::{One, Zero}; +use core::cmp; +use core::ops::{Add, Sub}; mod id; +mod id_list; mod id_range; mod id_vector; -mod id_list; -pub use id_vector::{IdSlice, MutIdSlice, IdVec}; -pub use id_list::{IdFreeList, NullId, NoneAsNullId}; pub use id::Id; +pub use id_list::{IdFreeList, NoneAsNullId, NullId}; pub use id_range::{IdRange, ReverseIdRange}; +pub use id_vector::{IdSlice, IdVec, MutIdSlice}; pub trait FromUsize { fn from_usize(idx: usize) -> Self; @@ -22,8 +25,8 @@ pub trait ToUsize { fn to_usize(&self) -> usize; } -pub trait IntegerHandle - : Copy +pub trait IntegerHandle: + Copy + Clone + Add + Sub @@ -33,7 +36,8 @@ pub trait IntegerHandle + FromUsize + ToUsize + Zero - + One { + + One +{ } pub trait Identifier: Copy + FromUsize + ToUsize + PartialEq { @@ -212,7 +216,6 @@ impl IntegerHandle for i32 {} impl IntegerHandle for i64 {} impl IntegerHandle for isize {} - /* // TODO: remove it or implement traits manually @@ -226,8 +229,8 @@ pub struct GenId { pub gen: G, } -impl std::fmt::Debug for GenId { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl core::fmt::Debug for GenId { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { write!(f, "GenId#{}({})", self.id.handle, self.gen) } } @@ -272,7 +275,6 @@ impl Generation for GenId { } */ - #[test] fn test_copy_id() { #[derive(Debug)] @@ -294,7 +296,7 @@ fn test_copy_id() { #[test] fn test_reverese_id_range() { - use std::iter::FromIterator; + use core::iter::FromIterator; fn range(first: u16, count: u16) -> IdRange { IdRange::new(first..(first + count)) }