pub trait State: Sized + Clone + Default + Send + Sync + Debug {
    fn subdivide(&self, subdivisions: usize) -> Vec<Self>;
    fn merge(states: &[Self]) -> Self;

    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

Create data template that we get by subdivision of source data.

Arguments
  • subdivisions - number of subdivisions.

Merge multiple data instances into one.

Arguments
  • states - list of source data to merge.

Provided Methods

Multiply and merge multiple instances of itself into one super state.

Arguments
  • dimensions - number of dimensions.
  • level - number level at which you merge.

Implementations on Foreign Types

Implementors