PolyBoRi
CCuddFirstIter.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
16 //*****************************************************************************
17 
18 #ifndef polybori_iterators_CCuddFirstIter_h_
19 #define polybori_iterators_CCuddFirstIter_h_
20 
21 // include basic definitions
22 #include "CCuddNavigator.h"
23 
24 // include boost's interator facade
25 #include <boost/iterator/iterator_facade.hpp>
26 
28 
36  public boost::iterator_facade<
37  CCuddFirstIter,
38  CCuddNavigator::value_type,
39  std::forward_iterator_tag,
40  CCuddNavigator::reference
41  > {
42 
43 public:
44 
46  typedef std::forward_iterator_tag iterator_category;
47 
49  typedef CCuddFirstIter self;
50 
53 
56 
59 
61  CCuddFirstIter(): m_navi() {}
62 
64  CCuddFirstIter(navigator rhs): m_navi(rhs) { terminateConstant(); }
65 
68 
70  void increment() {
71  m_navi.incrementThen();
72  terminateConstant();
73  }
74 
76  bool_type equal (const self& rhs) const { return (m_navi == rhs.m_navi); }
77 
79  navigator::reference dereference() const { return *m_navi; }
80 
82  bool_type isEnd() const { return !m_navi.isValid(); }
83 
84 protected:
87  if (m_navi.isConstant())
88  *this = self(); // mark end of path reached
89 
90  }
91 
94 };
95 
97 
98 #endif