PolyBoRi
|
00001 // -*- c++ -*- 00002 //***************************************************************************** 00014 //***************************************************************************** 00015 00016 #ifndef polybori_iterators_CStackSelector_h_ 00017 #define polybori_iterators_CStackSelector_h_ 00018 00019 // include basic definitions 00020 #include <polybori/pbori_defs.h> 00021 00022 // include polybori's functionals 00023 #include <polybori/routines/pbori_func.h> 00024 00025 // get stack types, which are used to store and handle paths of current terms 00026 #include "CTermStack.h" 00027 00028 // include standard iterator functionality 00029 #include <iterator> 00030 00031 #include <polybori/orderings/COrderingTags.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