16#ifndef vtkDataObjectTreeRange_h
17#define vtkDataObjectTreeRange_h
50struct DataObjectTreeRange;
51struct DataObjectTreeIterator;
57 :
public std::iterator<std::forward_iterator_tag, vtkDataObject*, int,
58 DataObjectTreeIteratorReference, DataObjectTreeIteratorReference>
61 using Superclass = std::iterator<std::forward_iterator_tag,
vtkDataObject*, int,
70 using pointer =
typename Superclass::pointer;
74 : Iterator(o.Iterator ?
SmartIterator::Take(o.Iterator->NewInstance()) : nullptr)
76 this->CopyState(o.Iterator);
84 this->CopyState(o.Iterator);
131 return !(lhs == rhs);
137 swap(lhs.Iterator, rhs.Iterator);
146 : Iterator(std::move(iter))
153 : Iterator{
nullptr }
158 void CopyState(InternalIterator*
source)
162 assert(this->Iterator !=
nullptr);
168 this->AdvanceTo(
source->GetCurrentFlatIndex());
172 void AdvanceTo(
const unsigned int flatIdx)
174 assert(this->Iterator !=
nullptr);
184 assert(this->Iterator !=
nullptr);
191 assert(this->Iterator !=
nullptr);
196 mutable SmartIterator Iterator;
217 : DataObjectTree(cds)
220 assert(this->DataObjectTree);
231 auto iter = this->NewIterator();
232 iter->InitTraversal();
233 while (!iter->IsDoneWithTraversal())
236 iter->GoToNextItem();
252 SmartIterator NewIterator()
const
257 result->SetSkipEmptyNodes((this->Options & Opts::SkipEmptyNodes) != Opts::None);
258 result->SetVisitOnlyLeaves((this->Options & Opts::VisitOnlyLeaves) != Opts::None);
259 result->SetTraverseSubTree((this->Options & Opts::TraverseSubTree) != Opts::None);
260 result->InitTraversal();
virtual void SetDataSet(vtkCompositeDataSet *ds)
Set the composite dataset this iterator is iterating over.
virtual void InitTraversal()
Begin iterating over the composite dataset structure.
virtual void SetSkipEmptyNodes(vtkTypeBool)
If SkipEmptyNodes is true, then nullptr datasets will be skipped.
superclass for composite data iterators
int IsDoneWithTraversal() override
Test whether the iterator is finished with the traversal.
virtual void SetTraverseSubTree(vtkTypeBool)
If TraverseSubTree is set to true, the iterator will visit the entire tree structure,...
void GoToNextItem() override
Move the iterator to the next item in the collection.
unsigned int GetCurrentFlatIndex() override
Flat index is an index obtained by traversing the tree in preorder.
virtual void SetVisitOnlyLeaves(vtkTypeBool)
If VisitOnlyLeaves is true, the iterator will only visit nodes (sub-datasets) that are not composite.
provides implementation for most abstract methods in the superclass vtkCompositeDataSet
virtual vtkDataObjectTreeIterator * NewTreeIterator()
Return a new iterator (the iterator has to be deleted by user).
general representation of visualization data
static vtkSmartPointer< InternalIterator > Take(InternalIterator *t)
Transfer ownership of one reference to the given VTK object to a new smart pointer.
A reference proxy into a vtkCompositeDataSet, obtained by dereferencing an iterator from the vtk::Ran...
vtk::CompositeDataSetNodeReference< vtkDataObjectTreeIterator, DataObjectTreeIterator > DataObjectTreeIteratorReference
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
typename Superclass::value_type value_type
pointer operator->() const
DataObjectTreeIterator(const DataObjectTreeIterator &o)
DataObjectTreeIterator(DataObjectTreeIterator &&) noexcept=default
DataObjectTreeIterator operator++(int)
DataObjectTreeIterator(SmartIterator &&iter) noexcept
typename Superclass::pointer pointer
reference operator*() const
DataObjectTreeIterator & operator++()
typename Superclass::reference reference
friend bool operator!=(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
typename Superclass::iterator_category iterator_category
DataObjectTreeIterator() noexcept
friend bool operator==(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
friend void swap(DataObjectTreeIterator &lhs, DataObjectTreeIterator &rhs) noexcept
typename Superclass::difference_type difference_type
vtkDataObjectTree * GetDataObjectTree() const noexcept
DataObjectTreeOptions GetOptions() const noexcept
DataObjectTreeRange(vtkDataObjectTree *cds, DataObjectTreeOptions opts=DataObjectTreeOptions::None)
const_iterator cbegin() const
const_iterator cend() const
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)