layer_rs/
node.rs

1use super::*;
2
3pub struct Node<Req, SubtreeL, SubtreeR> {
4    pub requirement: Req,
5    pub prev_left: SubtreeL,
6    pub prev_right: SubtreeR,
7}
8
9pub trait Depth
10where
11    Self::Output: IsNumber,
12{
13    type Output;
14}
15
16impl Depth for () {
17    type Output = Zero;
18}
19
20impl<Req, SubtreeL, SubtreeR> Depth for Node<Req, SubtreeL, SubtreeR>
21where
22    SubtreeL: Depth,
23    SubtreeR: Depth,
24    <SubtreeL as Depth>::Output: IsNumber,
25    <SubtreeR as Depth>::Output: IsNumber,
26    (): Max<<SubtreeL as Depth>::Output, <SubtreeR as Depth>::Output>,
27{
28    type Output = Succ<<() as Max<SubtreeL::Output, SubtreeR::Output>>::Output>;
29}
30
31pub trait MinDepth
32where
33    Self::Output: IsNumber,
34{
35    type Output;
36}
37
38impl MinDepth for () {
39    type Output = Zero;
40}
41
42impl<Req, SubtreeL, SubtreeR> MinDepth for Node<Req, SubtreeL, SubtreeR>
43where
44    SubtreeL: MinDepth,
45    SubtreeR: MinDepth,
46    <SubtreeL as MinDepth>::Output: IsNumber,
47    <SubtreeR as MinDepth>::Output: IsNumber,
48    (): Min<<SubtreeL as MinDepth>::Output, <SubtreeR as MinDepth>::Output>,
49{
50    type Output = Succ<<() as Min<SubtreeL::Output, SubtreeR::Output>>::Output>;
51}