PolyBoRi
|
00001 // -*- c++ -*- 00002 //***************************************************************************** 00014 //***************************************************************************** 00015 00016 // include basic definitions 00017 #include "pbori_defs.h" 00018 00019 // include polybori's functionals 00020 #include "pbori_func.h" 00021 00022 // get stack types, which are used to store and handle paths of current terms 00023 #include "CTermStack.h" 00024 00025 // include standard iterator functionality 00026 #include <iterator> 00027 00028 #include "COrderingTags.h" 00029 00030 #ifndef CStackSelector_h_ 00031 #define CStackSelector_h_ 00032 00033 BEGIN_NAMESPACE_PBORI 00037 template <class OrderType, class NaviType, class BaseType = internal_tag> 00038 class CStackSelector { 00039 00041 00042 typedef BaseType base; 00043 typedef NaviType navigator; 00044 typedef COrderingTags<typename OrderType::order_tag> orderings_tags; 00045 00046 typedef typename orderings_tags::descending_property descending; 00047 typedef typename orderings_tags::degorder_property deg_prop; 00048 typedef typename orderings_tags::blockorder_property block_prop; 00050 00052 typedef CTermStack<navigator, std::forward_iterator_tag, base> lex_type; 00053 00055 typedef CDegTermStack<navigator, descending, invalid_tag, base> deg_type; 00056 00058 typedef CBlockTermStack<navigator, descending, base> block_type; 00059 00061 typedef typename on_same_type<deg_prop, valid_tag, 00062 deg_type, lex_type>::type nonblock_type; 00063 00064 public: 00066 typedef typename on_same_type<block_prop, valid_tag, 00067 block_type, nonblock_type>::type type; 00068 }; 00069 00070 00071 END_NAMESPACE_PBORI 00072 00073 #endif