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