16 #ifndef vtkDataObjectTreeRange_h
17 #define vtkDataObjectTreeRange_h
50 struct DataObjectTreeRange;
51 struct 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);
83 this->Iterator = o.Iterator ? SmartIterator::Take(o.Iterator->NewInstance()) :
nullptr;
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);
163 this->Iterator->SetDataSet(source->GetDataSet());
164 this->Iterator->SetSkipEmptyNodes(source->GetSkipEmptyNodes());
165 this->Iterator->SetVisitOnlyLeaves(source->GetVisitOnlyLeaves());
166 this->Iterator->SetTraverseSubTree(source->GetTraverseSubTree());
167 this->Iterator->InitTraversal();
168 this->AdvanceTo(source->GetCurrentFlatIndex());
172 void AdvanceTo(
const unsigned int flatIdx)
174 assert(this->Iterator !=
nullptr);
175 assert(this->Iterator->GetCurrentFlatIndex() <= flatIdx);
176 while (this->Iterator->GetCurrentFlatIndex() < flatIdx)
184 assert(this->Iterator !=
nullptr);
185 assert(!this->Iterator->IsDoneWithTraversal());
186 this->Iterator->GoToNextItem();
189 DataObjectTreeIteratorReference
GetData()
const
191 assert(this->Iterator !=
nullptr);
192 assert(!this->Iterator->IsDoneWithTraversal());
193 return DataObjectTreeIteratorReference{ this->Iterator };
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
256 auto result = SmartIterator::Take(this->DataObjectTree->NewTreeIterator());
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();
271 #endif // vtkDataObjectTreeRange_h
vtkDataObjectTree * GetDataObjectTree() const noexcept
typename Superclass::value_type value_type
const_iterator cbegin() const
provides implementation for most abstract methods in the superclass vtkCompositeDataSet ...
vtk::CompositeDataSetNodeReference< vtkDataObjectTreeIterator, DataObjectTreeIterator > DataObjectTreeIteratorReference
typename Superclass::iterator_category iterator_category
DataObjectTreeIterator operator++(int)
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
DataObjectTreeOptions GetOptions() const noexcept
const_iterator cend() const
DataObjectTreeIterator(const DataObjectTreeIterator &o)
int IsDoneWithTraversal() override
Test whether the iterator is finished with the traversal.
friend bool operator==(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
friend bool operator!=(const DataObjectTreeIterator &lhs, const DataObjectTreeIterator &rhs)
typename Superclass::pointer pointer
DataObjectTreeRange(vtkDataObjectTree *cds, DataObjectTreeOptions opts=DataObjectTreeOptions::None)
typename Superclass::reference reference
DataObjectTreeIterator & operator++()
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
unsigned int GetCurrentFlatIndex() override
Flat index is an index obtained by traversing the tree in preorder.
vtkSmartPointer< vtkDataArray > GetData(const Ioss::GroupingEntity *entity, const std::string &fieldname, Ioss::Transform *transform=nullptr, Cache *cache=nullptr, const std::string &cachekey=std::string())
Returns a VTK array for a given field (fieldname) on the chosen block (or set) entity.
A reference proxy into a vtkCompositeDataSet, obtained by dereferencing an iterator from the vtk::Ran...
pointer operator->() const
reference operator*() const
superclass for composite data iterators
typename Superclass::difference_type difference_type
friend void swap(DataObjectTreeIterator &lhs, DataObjectTreeIterator &rhs) noexcept
DataObjectTreeIterator(SmartIterator &&iter) noexcept
DataObjectTreeIterator() noexcept
general representation of visualization data