capability-feature-measurement 0.1.0

A Rust crate providing a trait-based system for measuring and evaluating complexity, branching, density, and configuration of tree-like data structures.
Documentation
// ---------------- [ File: capability-feature-measurement/src/level_skipping.rs ]
crate::ix!();

/// ---------------------------------------------------------------------------
/// 6) Level Skipping
/// ---------------------------------------------------------------------------

/// Exposes how many nodes at each level are leaves, so we can compare to the config skip probabilities.
pub trait TreeLevelSkippingMeasurer {
    /// For each level, returns stats about how many nodes exist vs. how many are leaves.
    fn measure_tree_level_skipping(&self) -> HashMap<u8, TreeLevelSkippingStats>;
}

/// Describes skip-related stats at a given level. No public fields.
#[derive(Debug, Clone, PartialEq, Builder, Getters)]
#[builder(pattern = "owned", setter(into), build_fn(skip))]
#[getset(get = "pub")]
pub struct TreeLevelSkippingStats {
    #[builder(default)]
    level: u8,

    #[builder(default)]
    total_node_count: u64,

    #[builder(default)]
    total_leaf_count: u64,
}

impl Default for TreeLevelSkippingStats {
    fn default() -> Self {
        Self {
            level: 0,
            total_node_count: 0,
            total_leaf_count: 0,
        }
    }
}

impl TreeLevelSkippingStatsBuilder {
    pub fn build(&self) -> Result<TreeLevelSkippingStats, derive_builder::UninitializedFieldError> {
        let stats = TreeLevelSkippingStats {
            level: self.level.unwrap_or_default(),
            total_node_count: self.total_node_count.unwrap_or_default(),
            total_leaf_count: self.total_leaf_count.unwrap_or_default(),
        };
        Ok(stats)
    }
}