PolyBoRi
CStackSelector.h
Go to the documentation of this file.
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