use std::rc::Rc;
use crate::structs::block::Block;
use crate::structs::voxel_index::VoxelIndex;
use crate::traits::{coordinate::Coordinate, voxel_data::VoxelData};
pub trait VoxelBlock<C: Coordinate, V: VoxelData> {
fn block(&self) -> &Block<C>;
fn get(&self, index: VoxelIndex) -> V;
}
impl<C: Coordinate, V: VoxelData, B: VoxelBlock<C, V>> VoxelBlock<C, V> for &B {
fn block(&self) -> &Block<C> {
(*self).block()
}
fn get(&self, index: VoxelIndex) -> V {
(*self).get(index)
}
}
impl<C: Coordinate, V: VoxelData, B: VoxelBlock<C, V>> VoxelBlock<C, V> for Rc<B> {
fn block(&self) -> &Block<C> {
(**self).block()
}
fn get(&self, index: VoxelIndex) -> V {
(**self).get(index)
}
}