| 2 Aggregation / summarisation of information in branches of bisection trees. |
2 Aggregation / summarisation of information in branches of bisection trees. |
| 3 */ |
3 */ |
| 4 |
4 |
| 5 use crate::types::*; |
5 use crate::types::*; |
| 6 use crate::sets::Set; |
6 use crate::sets::Set; |
| |
7 use crate::instance::Instance; |
| 7 |
8 |
| 8 /// Trait for aggregating information about a branch of a [bisection tree][super::BT]. |
9 /// Trait for aggregating information about a branch of a [bisection tree][super::BT]. |
| 9 /// |
10 /// |
| 10 /// Currently [`Bounds`] is the only provided aggregator. |
11 /// Currently [`Bounds`] is the only provided aggregator. |
| 11 /// It keeps track of upper and lower bounds of a function representeed by the `BT` by |
12 /// It keeps track of upper and lower bounds of a function representeed by the `BT` by |
| 134 } |
135 } |
| 135 } |
136 } |
| 136 } |
137 } |
| 137 |
138 |
| 138 impl<F : Float> Set<F> for Bounds<F> { |
139 impl<F : Float> Set<F> for Bounds<F> { |
| 139 fn contains(&self, item : &F) -> bool { |
140 fn contains<I : Instance<F>>(&self, item : I) -> bool { |
| |
141 let v = item.own(); |
| 140 let &Bounds(l, u) = self; |
142 let &Bounds(l, u) = self; |
| 141 debug_assert!(l <= u); |
143 debug_assert!(l <= u); |
| 142 l <= *item && *item <= u |
144 l <= v && v <= u |
| 143 } |
145 } |
| 144 } |
146 } |
| 145 |
147 |
| 146 impl<F : Float> Bounds<F> { |
148 impl<F : Float> Bounds<F> { |
| 147 /// Calculate a common bound (glb, lub) for two bounds. |
149 /// Calculate a common bound (glb, lub) for two bounds. |