Voxomap
A C++11 voxel container.
iterator.hpp
Go to the documentation of this file.
1 #ifndef _VOXOMAP_ITERATOR_HPP_
2 #define _VOXOMAP_ITERATOR_HPP_
3 
4 #include <cstdint>
5 
6 namespace voxomap
7 {
8 
9 template <typename T_SuperContainer> class VoxelNode;
10 
19 template <typename T>
21 {
22  using VoxelData = typename T::VoxelData;
23  using VoxelContainer = typename T::VoxelContainer;
24 
25  VoxelNode<T>* node = nullptr;
27  VoxelData* voxel = nullptr;
28  uint8_t x = 0;
29  uint8_t y = 0;
30  uint8_t z = 0;
31 
49  operator bool() const;
53  bool operator==(container_iterator const& other) const;
57  bool operator!=(container_iterator const& other) const;
58 
69 
76  void getVoxelPosition(int& x, int& y, int& z) const;
83  void getRelativeVoxelPosition(int& x, int& y, int& z) const;
90  void initPosition(int x, int y, int z);
91 
92  int getRelativeX() const;
93  int getRelativeY() const;
94  int getRelativeZ() const;
95  int getAbsoluteX() const;
96  int getAbsoluteY() const;
97  int getAbsoluteZ() const;
98 
100 
101 protected:
104  bool findNextVoxel(VoxelContainer& container);
105 };
106 
110 template <typename T>
112 {
113  using Container = typename T::Container;
115  struct Position
116  {
117  uint8_t x = 0;
118  uint8_t y = 0;
119  uint8_t z = 0;
120  };
121 
122  Position containerPosition[T::NB_SUPERCONTAINER];
123 
141  bool operator==(supercontainer_iterator const& other) const;
145  bool operator!=(supercontainer_iterator const& other) const;
146 
157 
164  void getVoxelPosition(int& x, int& y, int& z) const;
171  void getRelativeVoxelPosition(int& x, int& y, int& z) const;
178  void initPosition(int x, int y, int z);
179 
180  int getRelativeX() const;
181  int getRelativeY() const;
182  int getRelativeZ() const;
183  int getAbsoluteX() const;
184  int getAbsoluteY() const;
185  int getAbsoluteZ() const;
186 
188 
189 private:
192 
193  template <class T_Container>
194  typename std::enable_if<(T_Container::NB_SUPERCONTAINER != 0 && T_Container::SUPERCONTAINER_ID != 0), bool>::type findNextContainer(T_Container& container);
195 
196  template <class T_Container>
197  typename std::enable_if<(T_Container::NB_SUPERCONTAINER != 0 && T_Container::SUPERCONTAINER_ID == 0), bool>::type findNextContainer(T_Container& container);
198 
199  template <class T_Container>
200  typename std::enable_if<(T_Container::NB_SUPERCONTAINER == 0), bool>::type findNextContainer(T_Container& container);
201 };
202 
203 }
204 
205 #include "iterator.ipp"
206 
207 #endif // _VOXOMAP_ITERATOR_HPP_
voxomap::supercontainer_iterator::operator==
bool operator==(supercontainer_iterator const &other) const
Returns true if the iterator is same as other.
voxomap::supercontainer_iterator::end
void end(VoxelNode< T > &node)
Initialize this with the next element after the last voxel of node.
voxomap::container_iterator::findNextChildNode
bool findNextChildNode(VoxelNode< T > &i_node)
voxomap::supercontainer_iterator::getRelativeZ
int getRelativeZ() const
voxomap
Definition: Node.hpp:8
voxomap::supercontainer_iterator::getAbsoluteZ
int getAbsoluteZ() const
voxomap::container_iterator::findRelativeVoxel
container_iterator< T > findRelativeVoxel(int x, int y, int z)
voxomap::supercontainer_iterator::getAbsoluteY
int getAbsoluteY() const
voxomap::container_iterator::operator!=
bool operator!=(container_iterator const &other) const
Returns true if the iterator is different as other.
voxomap::container_iterator::x
uint8_t x
x coordinate of voxel inside node
Definition: iterator.hpp:28
voxomap::container_iterator
Definition: iterator.hpp:21
voxomap::container_iterator::getAbsoluteX
int getAbsoluteX() const
voxomap::container_iterator::findNextParentNode
void findNextParentNode(VoxelNode< T > &i_node)
voxomap::supercontainer_iterator::findNextChildNode
bool findNextChildNode(VoxelNode< T > &node)
voxomap::container_iterator::getRelativeZ
int getRelativeZ() const
voxomap::supercontainer_iterator::operator*
supercontainer_iterator * operator*()
Dereference iterator.
voxomap::container_iterator::getAbsoluteZ
int getAbsoluteZ() const
voxomap::container_iterator::begin
void begin(VoxelNode< T > &node)
Initialize this with the first voxel of node.
voxomap::supercontainer_iterator::operator!=
bool operator!=(supercontainer_iterator const &other) const
Returns true if the iterator is different as other.
voxomap::supercontainer_iterator::Position
Definition: iterator.hpp:116
voxomap::container_iterator::VoxelContainer
typename T::VoxelContainer VoxelContainer
Definition: iterator.hpp:23
voxomap::supercontainer_iterator::getRelativeX
int getRelativeX() const
voxomap::supercontainer_iterator::findRelativeVoxel
supercontainer_iterator< T > findRelativeVoxel(int x, int y, int z)
voxomap::container_iterator::operator==
bool operator==(container_iterator const &other) const
Returns true if the iterator is same as other.
voxomap::supercontainer_iterator::findNextContainer
std::enable_if<(T_Container::NB_SUPERCONTAINER !=0 &&T_Container::SUPERCONTAINER_ID !=0), bool >::type findNextContainer(T_Container &container)
voxomap::container_iterator::z
uint8_t z
z coordinate of voxel inside node
Definition: iterator.hpp:30
voxomap::supercontainer_iterator::initPosition
void initPosition(int x, int y, int z)
Initiliaze the iterator with the absolute position.
voxomap::container_iterator::getAbsoluteY
int getAbsoluteY() const
voxomap::container_iterator::voxel
VoxelData * voxel
Pointer on voxel.
Definition: iterator.hpp:27
voxomap::supercontainer_iterator::operator++
supercontainer_iterator & operator++()
Pre-increment the iterator.
voxomap::supercontainer_iterator::findNextContainer
std::enable_if<(T_Container::NB_SUPERCONTAINER !=0 &&T_Container::SUPERCONTAINER_ID==0), bool >::type findNextContainer(T_Container &container)
voxomap::container_iterator::getVoxelPosition
void getVoxelPosition(int &x, int &y, int &z) const
Get the absolute position of the voxel.
voxomap::supercontainer_iterator::getAbsoluteX
int getAbsoluteX() const
voxomap::container_iterator::node
VoxelNode< T > * node
Pointer on node.
Definition: iterator.hpp:25
voxomap::supercontainer_iterator::getRelativeY
int getRelativeY() const
voxomap::VoxelNode< T >
voxomap::supercontainer_iterator::Position::z
uint8_t z
Definition: iterator.hpp:119
voxomap::supercontainer_iterator::getRelativeVoxelPosition
void getRelativeVoxelPosition(int &x, int &y, int &z) const
Get the relative position of the voxel inside its node.
voxomap::supercontainer_iterator::begin
void begin(VoxelNode< T > &node)
Initialize this with the first voxel of node.
voxomap::supercontainer_iterator
Definition: iterator.hpp:112
voxomap::container_iterator::operator*
container_iterator * operator*()
Dereference iterator.
voxomap::container_iterator::getRelativeX
int getRelativeX() const
voxomap::container_iterator::end
void end(VoxelNode< T > &node)
Initialize this with the next element after the last voxel of node.
voxomap::supercontainer_iterator::getVoxelPosition
void getVoxelPosition(int &x, int &y, int &z) const
Get the absolute position of the voxel.
voxomap::container_iterator::getRelativeY
int getRelativeY() const
voxomap::container_iterator::y
uint8_t y
y coordinate of voxel inside node
Definition: iterator.hpp:29
voxomap::container_iterator::findNextVoxel
bool findNextVoxel(VoxelContainer &container)
voxomap::container_iterator::VoxelData
typename T::VoxelData VoxelData
Definition: iterator.hpp:22
voxomap::container_iterator::operator++
container_iterator operator++(int)
Post increment the iterator.
voxomap::container_iterator::initPosition
void initPosition(int x, int y, int z)
Initiliaze the iterator with the absolute position.
voxomap::container_iterator::getRelativeVoxelPosition
void getRelativeVoxelPosition(int &x, int &y, int &z) const
Get the relative position of the voxel inside its node.
voxomap::container_iterator::voxelContainer
VoxelContainer * voxelContainer
Pointer on voxel container.
Definition: iterator.hpp:26
voxomap::supercontainer_iterator::Position::x
uint8_t x
Definition: iterator.hpp:117
voxomap::supercontainer_iterator::operator++
supercontainer_iterator operator++(int)
Post increment the iterator.
voxomap::supercontainer_iterator::findNextContainer
std::enable_if<(T_Container::NB_SUPERCONTAINER==0), bool >::type findNextContainer(T_Container &container)
voxomap::supercontainer_iterator::Container
typename T::Container Container
Definition: iterator.hpp:113
voxomap::supercontainer_iterator::containerPosition
Position containerPosition[T::NB_SUPERCONTAINER]
Internal positions of the containers.
Definition: iterator.hpp:122
voxomap::container_iterator::operator++
container_iterator & operator++()
Pre-increment the iterator.
voxomap::supercontainer_iterator::findNextParentNode
void findNextParentNode(VoxelNode< T > &node)
voxomap::supercontainer_iterator::Position::y
uint8_t y
Definition: iterator.hpp:118