melodium-engine 0.10.0

Mélodium core engine and executor implementation
Documentation
use super::{Connection, ModelInstanciation, TreatmentInstanciation};
use crate::descriptor::Treatment as TreatmentDescriptor;
use core::fmt::Debug;
use melodium_common::descriptor::Identifier;
use std::collections::HashMap;
use std::sync::Weak;

#[derive(Debug, Clone)]
pub struct Treatment {
    pub descriptor: Weak<TreatmentDescriptor>,
    pub model_instanciations: HashMap<String, ModelInstanciation>,
    pub treatments: HashMap<String, TreatmentInstanciation>,
    pub connections: Vec<Connection>,
}

impl Treatment {
    pub fn make_use(&self, identifier: &Identifier) -> bool {
        self.model_instanciations
            .iter()
            .any(|(_, model)| model.make_use(identifier))
            || self
                .treatments
                .iter()
                .any(|(_, treatment)| treatment.make_use(identifier))
    }

    pub fn uses(&self) -> Vec<Identifier> {
        let mut uses = vec![];
        uses.extend(
            self.model_instanciations
                .iter()
                .flat_map(|(_, mi)| mi.uses()),
        );
        uses.extend(self.treatments.iter().flat_map(|(_, ti)| ti.uses()));
        uses
    }
}