use crate::traits::{coordinate::Coordinate, voxel_data::VoxelData};
pub trait DataField<V: VoxelData, C: Coordinate> {
fn get_data(&self, x: C, y: C, z: C) -> V;
}
impl<V: VoxelData, C: Coordinate> DataField<V, C> for &dyn DataField<V, C> {
fn get_data(&self, x: C, y: C, z: C) -> V {
(*self).get_data(x, y, z)
}
}
impl<V: VoxelData, C: Coordinate, FN> DataField<V, C> for FN
where
FN: Fn(C, C, C) -> V,
{
fn get_data(&self, x: C, y: C, z: C) -> V {
self(x, y, z)
}
}