// 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)
}
}