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