radn-rs/src/flow/traversible.rs
timofey dc98e38b8f
All checks were successful
buildbot/cargo fmt (1.71) Build done.
buildbot/cargo doc (1.71) Build done.
buildbot/cargo clippy (1.71) Build done.
buildbot/cargo test (1.65) Build done.
buildbot/cargo clippy (1.65) Build done.
Send everything
2023-08-11 00:14:44 +00:00

38 lines
959 B
Rust

//! Traversible binary trees.
pub mod algorithms;
use std::sync::Arc;
use crate::flow::comparator::*;
use crate::func::*;
pub type Split<'a, T, A, D> = (
Arc<dyn TraversibleBinaryTree<'a, T, A, D>>,
Arc<dyn TraversibleBinaryTree<'a, T, A, D>>,
A,
);
pub trait TraversibleBinaryNode<'a, T: Monad<'a>, A: 'a, D: 'a + PartialEq>:
'a + Send + Sync
{
fn split(&self) -> Split<'a, T, A, D>;
fn to_tree(self: Arc<Self>) -> Arc<dyn TraversibleBinaryTree<'a, T, A, D>>;
}
pub trait TraversibleBinaryReference<'a, T: Monad<'a>, A: 'a, D: 'a + PartialEq>:
'a + Send + Sync
{
fn resolve(&self) -> Wrap<'a, Arc<dyn TraversibleBinaryNode<'a, T, A, D>>, T>;
/// This should be enough to compare reference for equality.
fn data(&self) -> D;
}
pub trait TraversibleBinaryTree<'a, T: Monad<'a>, A: 'a, D: 'a + PartialEq>:
'a + Send + Sync
{
fn refer(&self) -> Option<Arc<dyn TraversibleBinaryReference<'a, T, A, D>>>;
}