16 #ifndef vtkDataObjectTreeRange_h 
   17 #define vtkDataObjectTreeRange_h 
   52 struct DataObjectTreeRange;
 
   53 struct DataObjectTreeIterator;
 
   59   : 
public std::iterator<std::forward_iterator_tag, vtkDataObject*, int,
 
   60       DataObjectTreeIteratorReference, DataObjectTreeIteratorReference>
 
   63   using Superclass = std::iterator<std::forward_iterator_tag, 
vtkDataObject*, int,
 
   72   using pointer = 
typename Superclass::pointer;
 
   76     : Iterator(o.Iterator ? 
SmartIterator::Take(o.Iterator->NewInstance()) : nullptr)
 
   78     this->CopyState(o.Iterator);
 
   86     this->CopyState(o.Iterator);
 
  133     return !(lhs == rhs); 
 
  139     swap(lhs.Iterator, rhs.Iterator);
 
  154   void CopyState(InternalIterator* 
source)
 
  158       assert(this->Iterator != 
nullptr);
 
  159       this->Iterator->SetDataSet(
source->GetDataSet());
 
  160       this->Iterator->SetSkipEmptyNodes(
source->GetSkipEmptyNodes());
 
  161       this->Iterator->SetVisitOnlyLeaves(
source->GetVisitOnlyLeaves());
 
  162       this->Iterator->SetTraverseSubTree(
source->GetTraverseSubTree());
 
  163       this->Iterator->InitTraversal();
 
  164       this->AdvanceTo(
source->GetCurrentFlatIndex());
 
  168   void AdvanceTo(
const unsigned int flatIdx)
 
  170     assert(this->Iterator != 
nullptr);
 
  171     assert(this->Iterator->GetCurrentFlatIndex() <= flatIdx);
 
  172     while (this->Iterator->GetCurrentFlatIndex() < flatIdx)
 
  180     assert(this->Iterator != 
nullptr);
 
  181     assert(!this->Iterator->IsDoneWithTraversal());
 
  182     this->Iterator->GoToNextItem();
 
  187     assert(this->Iterator != 
nullptr);
 
  188     assert(!this->Iterator->IsDoneWithTraversal());
 
  192   mutable SmartIterator Iterator;
 
  213     : DataObjectTree(cds)
 
  216     assert(this->DataObjectTree);
 
  227     auto iter = this->NewIterator();
 
  228     iter->InitTraversal();
 
  229     while (!iter->IsDoneWithTraversal())
 
  232       iter->GoToNextItem();
 
  248   SmartIterator NewIterator()
 const 
  253     result->SetSkipEmptyNodes((this->Options & Opts::SkipEmptyNodes) != Opts::None);
 
  254     result->SetVisitOnlyLeaves((this->Options & Opts::VisitOnlyLeaves) != Opts::None);
 
  255     result->SetTraverseSubTree((this->Options & Opts::TraverseSubTree) != Opts::None);
 
  256     result->InitTraversal();
 
  267 #endif // __VTK_WRAP__ 
  269 #endif // vtkDataObjectTreeRange_h