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 
93  navigator m_navi;
94 };
95 
97 
98 #endif
CCuddFirstIter(navigator rhs)
Construct from navigator over nodes.
Definition: CCuddFirstIter.h:64
void terminateConstant()
Constant nodes are marked as the end of a path.
Definition: CCuddFirstIter.h:86
CCuddFirstIter()
Default constructor.
Definition: CCuddFirstIter.h:61
#define END_NAMESPACE_PBORI
Finish project's namespace.
Definition: pbori_defs.h:77
navigator::reference dereference() const
Dereferencing of the iterator.
Definition: CCuddFirstIter.h:79
CCuddNavigator navigator
Get navigator type.
Definition: CCuddFirstIter.h:52
#define BEGIN_NAMESPACE_PBORI
Start project's namespace.
Definition: pbori_defs.h:74
value_type reference
Definition: CCuddNavigator.h:71
CTypes::bool_type bool_type
Type for boolean results.
Definition: CCuddNavigator.h:58
navigator::bool_type bool_type
Type for boolean values.
Definition: CCuddFirstIter.h:58
bool_type equal(const self &rhs) const
Equality test.
Definition: CCuddFirstIter.h:76
~CCuddFirstIter()
Destructor.
Definition: CCuddFirstIter.h:67
bool_type isEnd() const
Check, whether end of iteration is reached.
Definition: CCuddFirstIter.h:82
navigator::const_access_type const_access_type
Type for constantly accessing node pointer.
Definition: CCuddFirstIter.h:55
This class defines an iterator over the first minimal term of a given ZDD node.
Definition: CCuddFirstIter.h:35
const pointer_type const_access_type
Type for constantly accessing node pointer.
Definition: CCuddNavigator.h:43
void increment()
Incrementation operation.
Definition: CCuddFirstIter.h:70
navigator m_navi
Use navigator to access diagram nodes.
Definition: CCuddFirstIter.h:93
This class defines an iterator for navigating through then and else branches of ZDDs.
Definition: CCuddNavigator.h:36
std::forward_iterator_tag iterator_category
Interface type for standard iterator access.
Definition: CCuddFirstIter.h:46