use crate::daemonic::{Anchor, StructuralAnchor};
use crate::daemonic::glass::Glass;
use crate::daemonic::glass::states::GlassStable;
pub trait SpatialAnchor: Anchor {
fn anchor_position(&self) -> &TopologySegment;
fn distance_to(&self, other: &TopologySegment) -> Option<usize> {
let self_pos = self.anchor_position();
let common = self_pos.segments().payload()
.iter()
.zip(other.segments().payload().iter())
.take_while(|(a, b)| a == b)
.count();
if common == 0 { return None; }
let up = self_pos.depth() - common;
let down = other.depth() - common;
Some(up + down)
}
fn neighbors(&self) -> TopologySegment;
}
pub use topology::{TopologySegment, TopologyAnchor, GLASS_SEG, DAEMONIC_SEG};
pub mod topology;