PolyBoRi

CGenericIter.h

Go to the documentation of this file.
00001 // -*- c++ -*-
00002 //*****************************************************************************
00085 //*****************************************************************************
00086 
00087 
00088 // include basic definitions
00089 #include "pbori_defs.h"
00090 #include "pbori_algo.h"
00091 
00092 // get stuff for term iteration
00093 #include "CStackSelector.h"
00094 #include "CTermIter.h"
00095 #include "CTermGenerator.h"
00096 
00097 
00098 #ifndef CGenericIter_h_
00099 #define CGenericIter_h_
00100 
00101 BEGIN_NAMESPACE_PBORI
00102 
00103 template <class OrderType, class NaviType, class RefType>
00104 struct pbori_base<CGenericIter<OrderType, NaviType, RefType> > {
00105 
00106   typedef typename CStackSelector<OrderType, NaviType>::type stack_type;
00107 
00108   typedef CTermIter<stack_type, CTermGenerator<RefType> > type;
00109 };
00110 
00111 
00112 template <class OrderType, class NaviType, class RefType>
00113 class CGenericIter: 
00114   public pbori_base<CGenericIter<OrderType, NaviType, RefType> >::type {
00115   
00116 public:
00117   typedef typename pbori_base<CGenericIter>::type base;
00118   typedef typename base::term_generator term_generator;
00119 
00120   template <class MgrType>
00121   CGenericIter(NaviType navi, const MgrType& mgr): base(navi, mgr) {}
00122   CGenericIter(): base() {}
00123 };
00124 
00125 template <class OrderType, class NaviType>
00126 class CGenericIter<OrderType, NaviType, BooleMonomial>: 
00127   public pbori_base<CGenericIter<OrderType, NaviType, BooleMonomial> >::type {
00128   
00129 public:
00130   typedef typename pbori_base<CGenericIter>::type base;
00131   typedef typename base::term_generator term_generator;
00132 
00133   template <class MgrType>
00134   CGenericIter(NaviType navi, const MgrType& mgr): base(navi, mgr) {}
00135 
00136   CGenericIter(): base() {}
00137 };
00138 
00140 
00141 
00142 
00143 
00144 
00145 END_NAMESPACE_PBORI
00146 
00147 #endif