PolyBoRi
|
00001 // -*- c++ -*- 00002 //***************************************************************************** 00034 //***************************************************************************** 00035 00036 // include basic definitions 00037 #include "pbori_defs.h" 00038 00039 // include polybori's functionals 00040 #include "pbori_func.h" 00041 00042 // get stack types, which are used to store and handle paths of current terms 00043 #include "CTermStack.h" 00044 //#include "CDegTermStack.h" 00045 //#include "CBlockTermStack.h" 00046 00047 // include standard iterator functionality 00048 #include <iterator> 00049 00050 00051 #ifndef CStackSelector_h_ 00052 #define CStackSelector_h_ 00053 00054 BEGIN_NAMESPACE_PBORI 00055 00056 template <class OrderType, class NaviType, class BaseType = internal_tag> 00057 class CStackSelector { 00058 00060 00061 typedef BaseType base; 00062 typedef NaviType navigator; 00063 typedef typename OrderType::descending_property descending; 00064 typedef typename OrderType::degorder_property deg_prop; 00065 typedef typename OrderType::blockorder_property block_prop; 00067 00069 typedef CTermStack<navigator, std::forward_iterator_tag, base> lex_type; 00070 00072 typedef CDegTermStack<navigator, descending, invalid_tag, base> deg_type; 00073 00075 typedef CBlockTermStack<navigator, descending, base> block_type; 00076 00078 typedef typename on_same_type<deg_prop, valid_tag, 00079 deg_type, lex_type>::type nonblock_type; 00080 00081 public: 00083 typedef typename on_same_type<block_prop, valid_tag, 00084 block_type, nonblock_type>::type type; 00085 }; 00086 00087 00088 END_NAMESPACE_PBORI 00089 00090 #endif