#[cfg(feature = "std")]
pub(crate) use self::std::*;
#[cfg(all(feature = "alloc", not(feature = "std")))]
pub(crate) use self::alloc::*;
#[cfg(all(not(feature = "alloc"), not(feature = "std")))]
pub(crate) use self::core::*;
#[cfg(feature = "std")]
mod std {
pub(crate) type Box<A> = std::boxed::Box<A>;
pub(crate) type Vec<A> = std::vec::Vec<A>;
pub(crate) type ChildrenVec<A> = std::vec::Vec<A>;
#[cfg(feature = "grid")]
pub(crate) type GridTrackVec<A> = std::vec::Vec<A>;
#[must_use]
pub(crate) fn new_vec_with_capacity<A>(capacity: usize) -> Vec<A> {
Vec::with_capacity(capacity)
}
#[must_use]
pub(crate) fn round(value: f32) -> f32 {
value.round()
}
#[must_use]
pub(crate) fn abs(value: f32) -> f32 {
value.abs()
}
pub(crate) fn f32_max(a: f32, b: f32) -> f32 {
std::cmp::max_by(a, b, |a, b| a.total_cmp(b))
}
#[cfg(feature = "grid")]
pub(crate) fn f32_min(a: f32, b: f32) -> f32 {
std::cmp::min_by(a, b, |a, b| a.total_cmp(b))
}
}
#[cfg(all(feature = "alloc", not(feature = "std")))]
mod alloc {
extern crate alloc;
use core::cmp::Ordering;
pub(crate) type Box<A> = alloc::boxed::Box<A>;
pub(crate) type Vec<A> = alloc::vec::Vec<A>;
pub(crate) type ChildrenVec<A> = alloc::vec::Vec<A>;
#[cfg(feature = "grid")]
pub(crate) type GridTrackVec<A> = alloc::vec::Vec<A>;
#[must_use]
pub(crate) fn new_vec_with_capacity<A>(capacity: usize) -> Vec<A> {
Vec::with_capacity(capacity)
}
#[must_use]
pub(crate) fn round(value: f32) -> f32 {
num_traits::float::FloatCore::round(value)
}
#[must_use]
pub(crate) fn abs(value: f32) -> f32 {
num_traits::float::FloatCore::abs(value)
}
pub(crate) fn f32_max(a: f32, b: f32) -> f32 {
match a.total_cmp(&b) {
Ordering::Greater | Ordering::Equal => a,
Ordering::Less => b,
}
}
#[cfg(feature = "grid")]
pub(crate) fn f32_min(a: f32, b: f32) -> f32 {
match a.total_cmp(&b) {
Ordering::Less => a,
Ordering::Greater | Ordering::Equal => b,
}
}
}
#[cfg(all(not(feature = "alloc"), not(feature = "std")))]
mod core {
use core::cmp::Ordering;
pub const MAX_NODE_COUNT: usize = 256;
pub const MAX_CHILD_COUNT: usize = 16;
#[cfg(feature = "grid")]
pub const MAX_GRID_TRACKS: usize = 16;
pub(crate) type Vec<A> = arrayvec::ArrayVec<A, MAX_NODE_COUNT>;
pub(crate) type ChildrenVec<A> = arrayvec::ArrayVec<A, MAX_CHILD_COUNT>;
#[cfg(feature = "grid")]
pub(crate) type GridTrackVec<A> = arrayvec::ArrayVec<A, MAX_GRID_TRACKS>;
#[must_use]
pub(crate) fn new_vec_with_capacity<A, const CAP: usize>(_capacity: usize) -> arrayvec::ArrayVec<A, CAP> {
arrayvec::ArrayVec::new()
}
#[inline]
#[must_use]
pub(crate) fn round(value: f32) -> f32 {
num_traits::float::FloatCore::round(value)
}
#[inline]
#[must_use]
pub(crate) fn abs(value: f32) -> f32 {
num_traits::float::FloatCore::abs(value)
}
pub(crate) fn f32_max(a: f32, b: f32) -> f32 {
match a.total_cmp(&b) {
Ordering::Greater | Ordering::Equal => a,
Ordering::Less => b,
}
}
#[cfg(feature = "grid")]
pub(crate) fn f32_min(a: f32, b: f32) -> f32 {
match a.total_cmp(&b) {
Ordering::Less => a,
Ordering::Greater | Ordering::Equal => b,
}
}
}