src/bisection_tree/bt.rs

branch
dev
changeset 86
d5b0e496b72f
parent 9
f40dfaf2166d
equal deleted inserted replaced
76:99ad55974e62 86:d5b0e496b72f
41 } 41 }
42 42
43 /// Node of a [`BT`] bisection tree. 43 /// Node of a [`BT`] bisection tree.
44 /// 44 ///
45 /// For the type and const parameteres, see the [module level documentation][super]. 45 /// For the type and const parameteres, see the [module level documentation][super].
46 #[derive(Clone, Debug)] 46 #[derive(Clone, Debug, Serialize, Deserialize)]
47 #[serde(bound(
48 serialize = "NodeOption<F, D, A, N, P> : Serialize,
49 A : Serialize,",
50 deserialize = "NodeOption<F, D, A, N, P> : for<'a> Deserialize<'a>,
51 A : for<'a> Deserialize<'a>,"
52 ))]
47 pub struct Node<F : Num, D, A : Aggregator, const N : usize, const P : usize> { 53 pub struct Node<F : Num, D, A : Aggregator, const N : usize, const P : usize> {
48 /// The data or branches under the node. 54 /// The data or branches under the node.
49 pub(super) data : NodeOption<F, D, A, N, P>, 55 pub(super) data : NodeOption<F, D, A, N, P>,
50 /// Aggregator for `data`. 56 /// Aggregator for `data`.
51 pub(super) aggregator : A, 57 pub(super) aggregator : A,
52 } 58 }
53 59
54 /// Branching information of a [`Node`] of a [`BT`] bisection tree into `P` subnodes. 60 /// Branching information of a [`Node`] of a [`BT`] bisection tree into `P` subnodes.
55 /// 61 ///
56 /// For the type and const parameters, see the [module level documentation][super]. 62 /// For the type and const parameters, see the [module level documentation][super].
57 #[derive(Clone, Debug)] 63 #[derive(Clone, Debug, Serialize, Deserialize)]
64 #[serde(bound(
65 serialize = "[Node<F, D, A, N, P>; P] : Serialize,
66 Loc<F, N> : Serialize,",
67 deserialize = "[Node<F, D, A, N, P>; P] : for<'a> Deserialize<'a>,
68 Loc<F, N> : for<'a> Deserialize<'a>,"
69 ))]
58 pub(super) struct Branches<F : Num, D, A : Aggregator, const N : usize, const P : usize> { 70 pub(super) struct Branches<F : Num, D, A : Aggregator, const N : usize, const P : usize> {
59 /// Point for subdivision of the (unstored) [`Cube`] corresponding to the node. 71 /// Point for subdivision of the (unstored) [`Cube`] corresponding to the node.
60 pub(super) branch_at : Loc<F, N>, 72 pub(super) branch_at : Loc<F, N>,
61 /// Subnodes 73 /// Subnodes
62 pub(super) nodes : [Node<F, D, A, N, P>; P], 74 pub(super) nodes : [Node<F, D, A, N, P>; P],
196 &self.nodes[self.get_node_index(x)] 208 &self.nodes[self.get_node_index(x)]
197 } 209 }
198 } 210 }
199 211
200 /// An iterator over the $P=2^N$ subcubes of a [`Cube`] subdivided at a point `d`. 212 /// An iterator over the $P=2^N$ subcubes of a [`Cube`] subdivided at a point `d`.
213 #[derive(Debug, Clone)]
201 pub(super) struct SubcubeIter<'b, F : Float, const N : usize, const P : usize> { 214 pub(super) struct SubcubeIter<'b, F : Float, const N : usize, const P : usize> {
202 domain : &'b Cube<F, N>, 215 domain : &'b Cube<F, N>,
203 branch_at : Loc<F, N>, 216 branch_at : Loc<F, N>,
204 index : usize, 217 index : usize,
205 } 218 }
635 /// The main bisection tree structure. 648 /// The main bisection tree structure.
636 /// 649 ///
637 /// It should be accessed via the [`BTImpl`] trait to hide the `const P : usize` parameter until 650 /// It should be accessed via the [`BTImpl`] trait to hide the `const P : usize` parameter until
638 /// const generics are flexible enough to fix `P=pow(2, N)` and thus also get rid of 651 /// const generics are flexible enough to fix `P=pow(2, N)` and thus also get rid of
639 /// the `BTNodeLookup : BTNode<F, D, A, N>` trait bound. 652 /// the `BTNodeLookup : BTNode<F, D, A, N>` trait bound.
640 #[derive(Clone,Debug)] 653 #[derive(Clone,Debug,Serialize,Deserialize)]
654 #[serde(bound(
655 serialize = "Cube<F, N> : Serialize,
656 M : Serialize,
657 <BTNodeLookup as BTNode<F, D, A, N>>::Node : Serialize,",
658 deserialize = "Cube<F, N> : for<'a> Deserialize<'a>,
659 M : for<'a> Deserialize<'a>,
660 <BTNodeLookup as BTNode<F, D, A, N>>::Node : for<'a> Deserialize<'a>,"
661 ))]
641 pub struct BT< 662 pub struct BT<
642 M : Depth, 663 M : Depth,
643 F : Float, 664 F : Float,
644 D : 'static + Copy, 665 D : 'static + Copy,
645 A : Aggregator, 666 A : Aggregator,

mercurial