pub trait State:
Sized
+ Clone
+ Default
+ Send
+ Sync
+ Debug {
// Required methods
fn subdivide(&self, subdivisions: usize) -> Vec<Self>;
fn merge(states: &[Self]) -> Self;
// Provided method
fn super_state_at_level(&self, dimensions: usize, level: usize) -> Self { ... }
}
Expand description
Trait that describes QDF space state.
§Examples
use quantized_density_fields::State;
use std::iter::repeat;
#[derive(Debug, Default, Eq, PartialEq, Clone)]
struct Integer(i32);
impl State for Integer {
fn subdivide(&self, subdivisions: usize) -> Vec<Self> {
repeat(Integer(self.0 / subdivisions as i32)).take(subdivisions).collect()
}
fn merge(states: &[Self]) -> Self {
Integer(states.iter().map(|v| v.0).sum())
}
}
let substates = Integer(16).subdivide(4);
assert_eq!(substates, vec![Integer(4), Integer(4), Integer(4), Integer(4)]);
let state = State::merge(&substates);
assert_eq!(state, Integer(16));
Required Methods§
Provided Methods§
Sourcefn super_state_at_level(&self, dimensions: usize, level: usize) -> Self
fn super_state_at_level(&self, dimensions: usize, level: usize) -> Self
Multiply and merge multiple instances of itself into one super state.
§Arguments
dimensions
- number of dimensions.level
- number level at which you merge.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.