PolyBoRi
CGenericIter.h
Go to the documentation of this file.
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