// When std is enabled, prefer those types #[cfg(feature = "std")] pub use self::std::*; // When alloc but not std is enabled, use those types #[cfg(all(feature = "alloc", not(feature = "std")))] pub use self::alloc::*; // When neither alloc or std is enabled, use a heapless fallback #[cfg(all(not(feature = "alloc"), not(feature = "std")))] pub use self::core::*; #[cfg(feature = "std")] mod std { pub type Box = std::boxed::Box; pub type Map = std::collections::HashMap; pub type Vec = std::vec::Vec; pub type ChildrenVec = std::vec::Vec; pub type ParentsVec = std::vec::Vec; pub fn new_map_with_capacity(capacity: usize) -> Map where K: Eq + std::hash::Hash, { Map::with_capacity(capacity) } pub fn new_vec_with_capacity(capacity: usize) -> Vec { Vec::with_capacity(capacity) } #[inline] pub fn round(value: f32) -> f32 { value.round() } #[inline] pub fn abs(value: f32) -> f32 { value.abs() } } #[cfg(all(feature = "alloc", not(feature = "std")))] mod alloc { extern crate alloc; pub type Box = alloc::boxed::Box; pub type Map = hashbrown::HashMap; pub type Vec = alloc::vec::Vec; pub type ChildrenVec = alloc::vec::Vec; pub type ParentsVec = alloc::vec::Vec; pub fn new_map_with_capacity(capacity: usize) -> Map { Map::with_capacity(capacity) } pub fn new_vec_with_capacity(capacity: usize) -> Vec { Vec::with_capacity(capacity) } #[inline] pub fn round(value: f32) -> f32 { num_traits::float::FloatCore::round(value) } #[inline] pub fn abs(value: f32) -> f32 { num_traits::float::FloatCore::abs(value) } } #[cfg(all(not(feature = "alloc"), not(feature = "std")))] mod core { pub const MAX_NODE_COUNT: usize = 256; pub const MAX_CHILD_COUNT: usize = 16; pub const MAX_PARENTS_COUNT: usize = 1; pub type Map = heapless::FnvIndexMap; pub type Vec = arrayvec::ArrayVec; pub type ChildrenVec = arrayvec::ArrayVec; pub type ParentsVec = arrayvec::ArrayVec; pub fn new_map_with_capacity(_capacity: usize) -> Map where K: Eq + ::hash32::Hash, { Map::new() } pub fn new_vec_with_capacity(_capacity: usize) -> arrayvec::ArrayVec { arrayvec::ArrayVec::new() } #[inline] pub fn round(value: f32) -> f32 { num_traits::float::FloatCore::round(value) } #[inline] pub fn abs(value: f32) -> f32 { num_traits::float::FloatCore::abs(value) } }