• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

CTermIter.h

Go to the documentation of this file.
00001 // -*- c++ -*-
00002 //*****************************************************************************
00105 //*****************************************************************************
00106 
00107 // include basic definitions
00108 #include "pbori_defs.h"
00109 
00110 // include polybori functionals
00111 #include "pbori_func.h"
00112 
00113 // include polybori properties
00114 #include "pbori_traits.h"
00115 
00116 
00117 // include boost's interator facade
00118 #include <boost/iterator/iterator_facade.hpp>
00119 
00120 #include "BooleEnv.h"
00121 #ifndef CTermIter_h_
00122 #define CTermIter_h_
00123 
00124 BEGIN_NAMESPACE_PBORI
00125 
00126 
00133 template <class StackType, class TermGeneratorType>
00134 class CTermIter: 
00135   public boost::iterator_facade<
00136   CTermIter<StackType, TermGeneratorType>,
00137   typename TermGeneratorType::value_type,
00138   typename StackType::iterator_category, 
00139   typename TermGeneratorType::result_type
00140   > {
00141 
00142 public:
00143 
00145   typedef StackType stack_type;
00146   
00148   typedef typename stack_type::navigator navigator;
00149 
00151   typedef typename navigator::idx_type idx_type;
00152 
00154   typedef typename navigator::bool_type bool_type;
00155 
00157   typedef typename navigator::size_type size_type;
00158 
00160   typedef TermGeneratorType term_generator;
00161 
00163 
00164   typedef typename stack_type::const_iterator const_iterator;
00165   typedef typename stack_type::const_reverse_iterator 
00166   const_reverse_iterator;
00168 
00170   CTermIter(const CTermIter& rhs): 
00171     m_getTerm(rhs.m_getTerm), m_stack(rhs.m_stack) {
00172   }
00173 
00175   template <class MgrType>
00176   CTermIter(navigator navi, const MgrType& mgr): 
00177     m_getTerm(mgr), m_stack(navi, mgr) {
00178     m_stack.init(); 
00179   }
00180 
00182   CTermIter():  m_getTerm(), m_stack() {}
00183 
00185   ~CTermIter() {}
00186 
00188   void increment() {
00189     m_stack.increment();
00190   }
00191 
00193   bool_type equal (const CTermIter& rhs) const {
00194      return m_stack.equal(rhs.m_stack);
00195   }
00196 
00198   typename term_generator::result_type dereference() const {
00199     return m_getTerm(m_stack);
00200   }
00201 
00203 
00204   const_iterator begin() const { return m_stack.begin(); }
00205   const_iterator end() const { return m_stack.end(); }
00206   const_reverse_iterator rbegin() const { return m_stack.rbegin(); }
00207   const_reverse_iterator rend() const { return m_stack.rend(); }
00209 
00211   bool_type isOne() const { return m_stack.isOne(); }
00212 
00214   bool_type isZero() const { return m_stack.isZero(); }
00215 
00217   bool_type isEnd() const { return isZero(); }
00218 
00220   size_type deg() const { return m_stack.deg(); }
00221 
00223   idx_type firstIndex() const { 
00224     assert(!m_stack.empty()); 
00225     return *begin(); 
00226   }
00227 
00229   navigator navigation() const {
00230     return m_stack.navigation();
00231   }
00232 
00233 protected:
00235   term_generator m_getTerm;
00236 
00238   stack_type m_stack;
00239 };
00240 
00241 
00242 END_NAMESPACE_PBORI
00243 
00244 #endif
00245 

Generated on Thu Oct 21 2010 02:56:32 for PolyBoRi by  doxygen 1.7.1