PolyBoRi
|
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