UFO 1.0.0
An Efficient Probabilistic 3D Mapping Framework That Embraces the Unknown
Loading...
Searching...
No Matches
node.hpp
1
42#ifndef UFO_CONTAINER_TREE_NODE_HPP
43#define UFO_CONTAINER_TREE_NODE_HPP
44
45// UFO
46#include <ufo/container/tree/code.hpp>
47#include <ufo/container/tree/index.hpp>
48
49// STL
50#include <cstddef>
51#include <functional>
52#include <ostream>
53
54namespace ufo
55{
56template <std::size_t Dim>
57struct TreeNode {
58 TreeCode<Dim> code;
60
61 constexpr TreeNode() = default;
62
63 constexpr TreeNode(TreeCode<Dim> const& code, TreeIndex const& index) noexcept
64 : code(code), index(index)
65 {
66 }
67
68 operator TreeCode<Dim>() const noexcept { return code; }
69
70 explicit operator TreeIndex() const noexcept { return index; }
71};
72
73//
74// Deduction guide
75//
76
77template <std::size_t Dim>
79
80//
81// Compare
82//
83
84template <std::size_t Dim>
85constexpr bool operator==(TreeNode<Dim> const& lhs, TreeNode<Dim> const& rhs) noexcept
86{
87 return lhs.code == rhs.code;
88}
89
90template <std::size_t Dim>
91constexpr bool operator!=(TreeNode<Dim> const& lhs, TreeNode<Dim> const& rhs) noexcept
92{
93 return !(lhs == rhs);
94}
95
96template <std::size_t Dim>
97constexpr bool operator<(TreeNode<Dim> const& lhs, TreeNode<Dim> const& rhs) noexcept
98{
99 return lhs.code < rhs.code;
100}
101
102template <std::size_t Dim>
103constexpr bool operator<=(TreeNode<Dim> const& lhs, TreeNode<Dim> const& rhs) noexcept
104{
105 return lhs.code <= rhs.code;
106}
107
108template <std::size_t Dim>
109constexpr bool operator>(TreeNode<Dim> const& lhs, TreeNode<Dim> const& rhs) noexcept
110{
111 return lhs.code > rhs.code;
112}
113
114template <std::size_t Dim>
115constexpr bool operator>=(TreeNode<Dim> const& lhs, TreeNode<Dim> const& rhs) noexcept
116{
117 return lhs.code >= rhs.code;
118}
119
120template <std::size_t Dim>
121std::ostream& operator<<(std::ostream& os, TreeNode<Dim> const& node)
122{
123 return os << "Code: (" << node.code << "), Index: (" << node.index << ')';
124}
125
126using BinaryNode = TreeNode<1>;
127using QuadNode = TreeNode<2>;
128using OctNode = TreeNode<3>;
129using HexNode = TreeNode<4>;
130
131} // namespace ufo
132
133namespace std
134{
135template <std::size_t Dim>
136struct hash<ufo::TreeNode<Dim>> {
137 std::size_t operator()(ufo::TreeNode<Dim> const& node) const
138 {
139 return hash<ufo::TreeCode<Dim>>()(node.code);
140 }
141};
142} // namespace std
143
144#endif // UFO_CONTAINER_TREE_NODE_HPP
STL namespace.
All vision-related classes and functions.
Definition cloud.hpp:49