160 template <
class Tree>
161 static constexpr void init(
Pred& p,
Tree const& t)
163 p.logit = t.occupancyLogit(p.occupancy);
166 template <
class Tree>
167 [[nodiscard]]
static constexpr bool returnable(
Pred const& p,
Tree const& t,
170 if constexpr (PredicateCompare::EQUAL == PC) {
171 return t.occupancyLogit(n) == p.logit;
172 }
else if constexpr (PredicateCompare::NOT_EQUAL == PC) {
173 return t.occupancyLogit(n) != p.logit;
174 }
else if constexpr (PredicateCompare::LESS_EQUAL == PC) {
175 return t.occupancyLogit(n) <= p.logit;
176 }
else if constexpr (PredicateCompare::GREATER_EQUAL == PC) {
177 return t.occupancyLogit(n) >= p.logit;
178 }
else if constexpr (PredicateCompare::LESS == PC) {
179 return t.occupancyLogit(n) < p.logit;
180 }
else if constexpr (PredicateCompare::GREATER == PC) {
181 return t.occupancyLogit(n) > p.logit;
185 template <
class Tree>
186 [[nodiscard]]
static constexpr bool traversable(
Pred const& p,
Tree const& t,
189 switch (t.occupancyPropagationCriteria()) {
190 case OccupancyPropagationCriteria::MIN:
191 if constexpr (PredicateCompare::EQUAL == PC) {
192 return t.occupancyLogit(n) <= p.logit;
193 }
else if constexpr (PredicateCompare::NOT_EQUAL == PC) {
195 }
else if constexpr (PredicateCompare::LESS_EQUAL == PC) {
196 return t.occupancyLogit(n) <= p.logit;
197 }
else if constexpr (PredicateCompare::GREATER_EQUAL == PC) {
199 }
else if constexpr (PredicateCompare::LESS == PC) {
200 return t.occupancyLogit(n) < p.logit;
201 }
else if constexpr (PredicateCompare::GREATER == PC) {
204 case OccupancyPropagationCriteria::MAX:
205 if constexpr (PredicateCompare::EQUAL == PC) {
206 return t.occupancyLogit(n) >= p.logit;
207 }
else if constexpr (PredicateCompare::NOT_EQUAL == PC) {
209 }
else if constexpr (PredicateCompare::LESS_EQUAL == PC) {
211 }
else if constexpr (PredicateCompare::GREATER_EQUAL == PC) {
212 return t.occupancyLogit(n) >= p.logit;
213 }
else if constexpr (PredicateCompare::LESS == PC) {
215 }
else if constexpr (PredicateCompare::GREATER == PC) {
216 return t.occupancyLogit(n) > p.logit;
218 case OccupancyPropagationCriteria::MEAN:
return true;
219 case OccupancyPropagationCriteria::ONLY_INDICATORS:
return true;
220 case OccupancyPropagationCriteria::NONE:
return true;