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
54
namespace
ufo
55
{
56
template
<std::
size_t
Dim>
57
struct
TreeNode
{
58
TreeCode<Dim>
code;
59
TreeIndex
index
;
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
77
template
<std::
size_t
Dim>
78
TreeNode
(
TreeCode<Dim>
,
TreeIndex
) ->
TreeNode<Dim>
;
79
80
//
81
// Compare
82
//
83
84
template
<std::
size_t
Dim>
85
constexpr
bool
operator==(
TreeNode<Dim>
const
& lhs,
TreeNode<Dim>
const
& rhs)
noexcept
86
{
87
return
lhs.code == rhs.code;
88
}
89
90
template
<std::
size_t
Dim>
91
constexpr
bool
operator!=(TreeNode<Dim>
const
& lhs, TreeNode<Dim>
const
& rhs)
noexcept
92
{
93
return
!(lhs == rhs);
94
}
95
96
template
<std::
size_t
Dim>
97
constexpr
bool
operator<(TreeNode<Dim>
const
& lhs, TreeNode<Dim>
const
& rhs)
noexcept
98
{
99
return
lhs.code < rhs.code;
100
}
101
102
template
<std::
size_t
Dim>
103
constexpr
bool
operator<=(TreeNode<Dim>
const
& lhs, TreeNode<Dim>
const
& rhs)
noexcept
104
{
105
return
lhs.code <= rhs.code;
106
}
107
108
template
<std::
size_t
Dim>
109
constexpr
bool
operator>(TreeNode<Dim>
const
& lhs, TreeNode<Dim>
const
& rhs)
noexcept
110
{
111
return
lhs.code > rhs.code;
112
}
113
114
template
<std::
size_t
Dim>
115
constexpr
bool
operator>=(TreeNode<Dim>
const
& lhs, TreeNode<Dim>
const
& rhs)
noexcept
116
{
117
return
lhs.code >= rhs.code;
118
}
119
120
template
<std::
size_t
Dim>
121
std::ostream& operator<<(std::ostream& os, TreeNode<Dim>
const
& node)
122
{
123
return
os <<
"Code: ("
<< node.code <<
"), Index: ("
<< node.index <<
')'
;
124
}
125
126
using
BinaryNode = TreeNode<1>;
127
using
QuadNode = TreeNode<2>;
128
using
OctNode = TreeNode<3>;
129
using
HexNode = TreeNode<4>;
130
131
}
// namespace ufo
132
133
namespace
std
134
{
135
template
<std::
size_t
Dim>
136
struct
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
ufo::TreeCode
Definition
code.hpp:59
std
STL namespace.
ufo
All vision-related classes and functions.
Definition
cloud.hpp:49
ufo::TreeIndex
Definition
index.hpp:54
ufo::TreeNode
Definition
node.hpp:57
ufo::index
Definition
type_traits.hpp:248
lib
container
include
ufo
container
tree
node.hpp
Generated by
1.9.8