pub mod base;
pub mod indexing;
pub mod iterator;
pub mod bounding_box;
use crate::{Chunk, cell::Cell};
use hashbrown::HashMap;
use ndarray::{Array, Dim, Dimension, IntoDimension, Ix};
pub struct GridMap<A, const D: usize, Ic = isize>
where
A: Cell,
{
chunk_dim: [Ix; D],
map: HashMap<[Ic; D], Chunk<A, D>>,
empty: A,
}
impl<A, const D: usize, Ic> Default for GridMap<A, D, Ic>
where
A: Cell,
{
#[inline]
fn default() -> Self {
Self {
chunk_dim: [12; D],
map: HashMap::new(),
empty: A::NULL,
}
}
}
impl<A, const D: usize, Ic> GridMap<A, D, Ic>
where
A: Cell,
{
#[inline]
pub fn new(chunk_dim: [Ix; D]) -> Self {
Self {
chunk_dim,
map: HashMap::new(),
empty: A::NULL,
}
}
pub fn with_capacity(chunk_dim: [Ix; D], capacity: usize) -> Self {
Self {
chunk_dim,
map: HashMap::with_capacity(capacity),
empty: A::NULL,
}
}
}
fn make_chunk<A, const D: usize>(chunk_dim: &[Ix; D]) -> Array<A, Dim<[Ix; D]>>
where
A: Default,
[Ix; D]: IntoDimension<Dim = Dim<[Ix; D]>>,
Dim<[Ix; D]>: Dimension,
{
Array::default(Dim(*chunk_dim))
}