use crate::{CoreError, Ensemble, EnsembleHandle, Scene};
#[cfg(test)]
#[path = "ensembles_tests.rs"]
mod tests;
impl Scene {
pub fn add_ensemble(&mut self, ensemble: Ensemble) -> Result<EnsembleHandle, CoreError> {
if ensemble
.members()
.iter()
.any(|member| self.structure(*member).is_none())
{
return Err(CoreError::StaleHandle);
}
self.ensemble_revision = self.ensemble_revision.wrapping_add(1);
Ok(EnsembleHandle(self.ensembles.insert(ensemble)))
}
#[must_use]
pub fn ensemble(&self, handle: EnsembleHandle) -> Option<&Ensemble> {
self.ensembles.get(handle.0)
}
pub fn remove_ensemble(&mut self, handle: EnsembleHandle) -> Option<Ensemble> {
let removed = self.ensembles.remove(handle.0);
if removed.is_some() {
self.ensemble_revision = self.ensemble_revision.wrapping_add(1);
}
removed
}
pub fn ensembles(&self) -> impl Iterator<Item = (EnsembleHandle, &Ensemble)> + '_ {
self.ensembles
.iter()
.map(|(handle, ensemble)| (EnsembleHandle(handle), ensemble))
}
#[must_use]
pub const fn ensemble_revision(&self) -> u64 {
self.ensemble_revision
}
}