DGtal 2.1.0
Loading...
Searching...
No Matches
DGtal::DigitalSetByOctree< Space >::OctreeIterator Struct Reference

Iterator over the octree. More...

#include <DGtal/kernel/sets/DigitalSetByOctree.h>

Public Types

using iterator_category = std::forward_iterator_tag
 
using difference_type = std::ptrdiff_t
 
using value_type = Point
 
using reference = value_type &
 
using pointer = value_type *
 

Public Member Functions

 OctreeIterator (const DigitalSetByOctree *container)
 Constuctor to end of an octree.
 
 OctreeIterator (const DigitalSetByOctree *container, TraversalMemory init)
 Constructor from any node to explore subtree.
 
 OctreeIterator (const DigitalSetByOctree *container, std::vector< TraversalMemory > &memory)
 Constructor from an entire traversal.
 
bool operator== (const OctreeIterator &other) const
 Compares two iterator.
 
bool operator!= (const OctreeIterator &other) const
 Not equal comparison operator.
 
Point operator* () const
 Dereference operator.
 
OctreeIteratoroperator++ ()
 Prefix increment.
 
OctreeIterator operator++ (int)
 Postfix increment.
 

Private Member Functions

void findNextLeaf ()
 Finds the next leaf, if any.
 

Private Attributes

const DigitalSetByOctreemyContainer
 
std::vector< TraversalMemorymyMemory
 

Friends

class DigitalSetByOctree
 

Detailed Description

template<class Space>
struct DGtal::DigitalSetByOctree< Space >::OctreeIterator

Iterator over the octree.

Definition at line 168 of file DigitalSetByOctree.h.

Member Typedef Documentation

◆ difference_type

template<class Space >
using DGtal::DigitalSetByOctree< Space >::OctreeIterator::difference_type = std::ptrdiff_t

Definition at line 176 of file DigitalSetByOctree.h.

◆ iterator_category

template<class Space >
using DGtal::DigitalSetByOctree< Space >::OctreeIterator::iterator_category = std::forward_iterator_tag

Definition at line 175 of file DigitalSetByOctree.h.

◆ pointer

template<class Space >
using DGtal::DigitalSetByOctree< Space >::OctreeIterator::pointer = value_type*

Definition at line 179 of file DigitalSetByOctree.h.

◆ reference

template<class Space >
using DGtal::DigitalSetByOctree< Space >::OctreeIterator::reference = value_type&

Definition at line 178 of file DigitalSetByOctree.h.

◆ value_type

template<class Space >
using DGtal::DigitalSetByOctree< Space >::OctreeIterator::value_type = Point

Definition at line 177 of file DigitalSetByOctree.h.

Constructor & Destructor Documentation

◆ OctreeIterator() [1/3]

template<class Space >
DGtal::DigitalSetByOctree< Space >::OctreeIterator::OctreeIterator ( const DigitalSetByOctree container)
inline

Constuctor to end of an octree.

Definition at line 184 of file DigitalSetByOctree.h.

185 {
186 myContainer = container;
187 }

References DGtal::DigitalSetByOctree< Space >::OctreeIterator::myContainer.

◆ OctreeIterator() [2/3]

template<class Space >
DGtal::DigitalSetByOctree< Space >::OctreeIterator::OctreeIterator ( const DigitalSetByOctree container,
TraversalMemory  init 
)
inline

Constructor from any node to explore subtree.

The main purpose of this constructor is to pass the root node.

Definition at line 195 of file DigitalSetByOctree.h.

197 {
198 myContainer = container;
199 myMemory.push_back(std::move(init));
200
201 findNextLeaf();
202 }
void findNextLeaf()
Finds the next leaf, if any.
std::vector< TraversalMemory > myMemory
K init(Point(0, 0, 0), Point(512, 512, 512), true)

References DGtal::DigitalSetByOctree< Space >::OctreeIterator::findNextLeaf(), init(), DGtal::DigitalSetByOctree< Space >::OctreeIterator::myContainer, and DGtal::DigitalSetByOctree< Space >::OctreeIterator::myMemory.

◆ OctreeIterator() [3/3]

template<class Space >
DGtal::DigitalSetByOctree< Space >::OctreeIterator::OctreeIterator ( const DigitalSetByOctree container,
std::vector< TraversalMemory > &  memory 
)
inline

Constructor from an entire traversal.

The main purpose of this constructor is for the find method to directly build the iterator without searching through the whole tree.

Definition at line 211 of file DigitalSetByOctree.h.

213 {
214 myContainer = container;
215 myMemory = memory;
216 }

References DGtal::DigitalSetByOctree< Space >::OctreeIterator::myContainer, and DGtal::DigitalSetByOctree< Space >::OctreeIterator::myMemory.

Member Function Documentation

◆ findNextLeaf()

◆ operator!=()

template<class Space >
bool DGtal::DigitalSetByOctree< Space >::OctreeIterator::operator!= ( const OctreeIterator other) const
inline

Not equal comparison operator.

Definition at line 239 of file DigitalSetByOctree.h.

240 {
241 return !(*this == other);
242 }

◆ operator*()

template<class Space >
Point DGtal::DigitalSetByOctree< Space >::OctreeIterator::operator* ( ) const
inline

Dereference operator.

Definition at line 247 of file DigitalSetByOctree.h.

248 {
249 const auto& sides = SIDES_FROM_INDEX[myMemory.back().currentChildIdx];
250 return splitDomain(myMemory.back().domain, sides.data()).lowerBound();
251 }
static Domain splitDomain(const Domain &domain, const DimIndex *sides)
Helper function to split and select among 2^D subdomains.
static constexpr std::array< std::array< DimIndex, D >, CELL_COUNT > SIDES_FROM_INDEX
const Point & lowerBound() const

References DGtal::HyperRectDomain< TSpace >::lowerBound(), DGtal::DigitalSetByOctree< Space >::OctreeIterator::myMemory, DGtal::DigitalSetByOctree< Space >::SIDES_FROM_INDEX, and DGtal::DigitalSetByOctree< Space >::splitDomain().

◆ operator++() [1/2]

template<class Space >
OctreeIterator & DGtal::DigitalSetByOctree< Space >::OctreeIterator::operator++ ( )
inline

Prefix increment.

Definition at line 256 of file DigitalSetByOctree.h.

257 {
258 findNextLeaf();
259 return *this;
260 }

References DGtal::DigitalSetByOctree< Space >::OctreeIterator::findNextLeaf().

◆ operator++() [2/2]

template<class Space >
OctreeIterator DGtal::DigitalSetByOctree< Space >::OctreeIterator::operator++ ( int  )
inline

Postfix increment.

Definition at line 265 of file DigitalSetByOctree.h.

266 {
267 auto it = *this;
268 findNextLeaf();
269 return it;
270 }

References DGtal::DigitalSetByOctree< Space >::OctreeIterator::findNextLeaf().

◆ operator==()

template<class Space >
bool DGtal::DigitalSetByOctree< Space >::OctreeIterator::operator== ( const OctreeIterator other) const
inline

Compares two iterator.

Note: The end of an octree is represented by an empty traversal memory

Definition at line 224 of file DigitalSetByOctree.h.

225 {
226 if (myContainer != other.myContainer) return false;
227 if (myMemory.size() != other.myMemory.size()) return false;
228
229 if (myMemory.size() != 0)
230 {
231 return myMemory.back() == other.myMemory.back();
232 }
233 return true;
234 }

References DGtal::DigitalSetByOctree< Space >::OctreeIterator::myContainer, and DGtal::DigitalSetByOctree< Space >::OctreeIterator::myMemory.

Friends And Related Symbol Documentation

◆ DigitalSetByOctree

template<class Space >
friend class DigitalSetByOctree
friend

Definition at line 171 of file DigitalSetByOctree.h.

Field Documentation

◆ myContainer

◆ myMemory


The documentation for this struct was generated from the following file: