00001
00002
00085
00086
00087
00088
00089 #include "pbori_defs.h"
00090 #include "pbori_algo.h"
00091
00092
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 #if 0
00126 template <class OrderType, class NaviType>
00127 class CGenericIter<OrderType, NaviType, BooleMonomial>:
00128 public pbori_base<CGenericIter<OrderType, NaviType, BooleMonomial> >::type {
00129
00130 public:
00131 typedef typename pbori_base<CGenericIter>::type base;
00132 typedef typename base::term_generator term_generator;
00133
00134 template <class MgrType>
00135 CGenericIter(NaviType navi, const MgrType& mgr): base(navi, mgr) {}
00136
00137 CGenericIter(): base() {}
00138 };
00139 #endif
00140
00142 template <class OrderType, class NaviType, class RefType>
00143 struct pbori_base<CReverseIter<OrderType, NaviType, RefType> > {
00144
00145 typedef CReverseTermStack<NaviType, std::bidirectional_iterator_tag> stack_type;
00146
00147 typedef CTermIter<stack_type, CTermGenerator<RefType> > type;
00148 };
00149
00150
00151 template <class OrderType, class NaviType, class RefType>
00152 class CReverseIter:
00153 public pbori_base<CReverseIter<OrderType, NaviType, RefType> >::type {
00154
00155 public:
00156 typedef typename pbori_base<CReverseIter>::type base;
00157 typedef typename base::term_generator term_generator;
00158
00159 template <class MgrType>
00160 CReverseIter(NaviType navi, const MgrType& mgr): base(navi, mgr) {}
00161
00162 CReverseIter(): base() {}
00163 };
00164
00165
00166
00167 END_NAMESPACE_PBORI
00168
00169 #endif