00001
00002
00014
00015
00016 #ifndef polybori_iterators_CStackSelector_h_
00017 #define polybori_iterators_CStackSelector_h_
00018
00019
00020 #include <polybori/pbori_defs.h>
00021
00022
00023 #include <polybori/routines/pbori_func.h>
00024
00025
00026 #include "CTermStack.h"
00027
00028
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