PolyBoRi
|
00001 // -*- c++ -*- 00002 //***************************************************************************** 00013 //***************************************************************************** 00014 00015 00016 // include basic definitions 00017 #include "pbori_defs.h" 00018 #include "pbori_algo.h" 00019 00020 // get stuff for term iteration 00021 #include "CStackSelector.h" 00022 #include "CTermIter.h" 00023 #include "CTermGenerator.h" 00024 00025 00026 #ifndef CGenericIter_h_ 00027 #define CGenericIter_h_ 00028 00029 BEGIN_NAMESPACE_PBORI 00030 00031 template <class OrderType, class NaviType, class RefType> 00032 struct pbori_base<CGenericIter<OrderType, NaviType, RefType> > { 00033 00034 typedef typename CStackSelector<OrderType, NaviType>::type stack_type; 00035 00036 typedef CTermIter<stack_type, CTermGenerator<RefType> > type; 00037 }; 00038 00039 00040 template <class OrderType, class NaviType, class RefType> 00041 class CGenericIter: 00042 public pbori_base<CGenericIter<OrderType, NaviType, RefType> >::type { 00043 00044 public: 00045 typedef typename pbori_base<CGenericIter>::type base; 00046 typedef typename base::term_generator term_generator; 00047 00048 template <class MgrType> 00049 CGenericIter(NaviType navi, const MgrType& mgr): base(navi, mgr) {} 00050 CGenericIter(): base() {} 00051 }; 00052 00053 #if 0 00054 template <class OrderType, class NaviType> 00055 class CGenericIter<OrderType, NaviType, BooleMonomial>: 00056 public pbori_base<CGenericIter<OrderType, NaviType, BooleMonomial> >::type { 00057 00058 public: 00059 typedef typename pbori_base<CGenericIter>::type base; 00060 typedef typename base::term_generator term_generator; 00061 00062 template <class MgrType> 00063 CGenericIter(NaviType navi, const MgrType& mgr): base(navi, mgr) {} 00064 00065 CGenericIter(): base() {} 00066 }; 00067 #endif 00068 00070 template <class OrderType, class NaviType, class RefType> 00071 struct pbori_base<CReverseIter<OrderType, NaviType, RefType> > { 00072 00073 typedef CReverseTermStack<NaviType, std::bidirectional_iterator_tag> stack_type; 00074 00075 typedef CTermIter<stack_type, CTermGenerator<RefType> > type; 00076 }; 00077 00078 00079 template <class OrderType, class NaviType, class RefType> 00080 class CReverseIter: 00081 public pbori_base<CReverseIter<OrderType, NaviType, RefType> >::type { 00082 00083 public: 00084 typedef typename pbori_base<CReverseIter>::type base; 00085 typedef typename base::term_generator term_generator; 00086 00087 template <class MgrType> 00088 CReverseIter(NaviType navi, const MgrType& mgr): base(navi, mgr) {} 00089 00090 CReverseIter(): base() {} 00091 }; 00092 00093 00094 00095 END_NAMESPACE_PBORI 00096 00097 #endif