UFO 1.0.0
An Efficient Probabilistic 3D Mapping Framework That Embraces the Unknown
Loading...
Searching...
No Matches
contains_occupancy_state.hpp
1
42#ifndef UFO_MAP_OCCUPANCY_PREDICATE_CONTAINS_OCCUPANCY_STATE_HPP
43#define UFO_MAP_OCCUPANCY_PREDICATE_CONTAINS_OCCUPANCY_STATE_HPP
44
45// UFO
46#include <ufo/container/tree/predicate/filter.hpp>
47#include <ufo/map/occupancy/propagation_criteria.hpp>
48#include <ufo/map/occupancy/state.hpp>
49
50namespace ufo::pred
51{
52template <ufo::OccupancyState State>
55
59
60template <ufo::OccupancyState State>
62 : public FilterBase<ContainOccupancyState<State>> {
64
65 template <class Tree>
66 static constexpr void init(Pred&, Tree const&)
67 {
68 }
69
70 template <class Tree, class Node>
71 [[nodiscard]] static constexpr bool returnable(Pred const&, Tree const& t,
72 Node const& n)
73 {
74 if constexpr (ufo::OccupancyState::UNKNOWN == State) {
75 return t.containsUnknown(n.index);
76 } else if constexpr (ufo::OccupancyState::FREE == State) {
77 return t.containsFree(n.index);
78 } else if constexpr (ufo::OccupancyState::OCCUPIED == State) {
79 return t.containsOccupied(n.index);
80 }
81 }
82
83 template <class Tree, class Node>
84 [[nodiscard]] static constexpr bool traversable(Pred const& p, Tree const& t,
85 Node const& n)
86 {
87 if (OccupancyPropagationCriteria::NONE == t.occupancyPropagationCriteria()) {
88 return true;
89 }
90
91 if constexpr (ufo::OccupancyState::UNKNOWN == State) {
92 return t.containsUnknown(n.index);
93 } else if constexpr (ufo::OccupancyState::FREE == State) {
94 return t.containsFree(n.index);
95 } else if constexpr (ufo::OccupancyState::OCCUPIED == State) {
96 return t.containsOccupied(n.index);
97 }
98 }
99};
100} // namespace ufo::pred
101
102#endif // UFO_MAP_OCCUPANCY_PREDICATE_CONTAINS_OCCUPANCY_STATE_HPP
Utilizing curiously recurring template pattern (CRTP)
Definition tree.hpp:104