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 {
187 }
A DigitalSet that stores voxels as an octree, or a DAG.

References DigitalSetByOctree, and myContainer.

Referenced by operator!=(), operator++(), operator++(), and operator==().

◆ 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 {
199 myMemory.push_back(std::move(init));
200
201 findNextLeaf();
202 }
void findNextLeaf()
Finds the next leaf, if any.
std::vector< TraversalMemory > myMemory

References DigitalSetByOctree, findNextLeaf(), init(), myContainer, and 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 {
216 }

References DigitalSetByOctree, myContainer, and myMemory.

Member Function Documentation

◆ findNextLeaf()

template<class Space>
void DGtal::DigitalSetByOctree< Space >::OctreeIterator::findNextLeaf ( )
private

Finds the next leaf, if any.

Referenced by OctreeIterator(), operator++(), and operator++().

◆ 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 }

References OctreeIterator().

◆ 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.
const Point & lowerBound() const

References DGtal::HyperRectDomain< TSpace >::lowerBound(), 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 findNextLeaf(), and OctreeIterator().

◆ 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 findNextLeaf(), and OctreeIterator().

◆ 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 }
size_t size() const
Returns the number of voxel in the set.

References myContainer, myMemory, and OctreeIterator().

◆ DigitalSetByOctree

template<class Space>
friend class DigitalSetByOctree
friend

Field Documentation

◆ myContainer

template<class Space>
const DigitalSetByOctree* DGtal::DigitalSetByOctree< Space >::OctreeIterator::myContainer
private

Definition at line 277 of file DigitalSetByOctree.h.

Referenced by OctreeIterator(), OctreeIterator(), OctreeIterator(), and operator==().

◆ myMemory

template<class Space>
std::vector<TraversalMemory> DGtal::DigitalSetByOctree< Space >::OctreeIterator::myMemory
private

Definition at line 278 of file DigitalSetByOctree.h.

Referenced by OctreeIterator(), OctreeIterator(), operator*(), and operator==().


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