PolyBoRi
COrderProperties.h
Go to the documentation of this file.
00001 // -*- c++ -*-
00002 //*****************************************************************************
00013 //*****************************************************************************
00014 
00015 // include basic definitions
00016 #include "pbori_defs.h"
00017 
00018 // include ordering tags
00019 #include "pbori_tags.h"
00020 
00021 // include polybori functionals
00022 #include "pbori_func.h"
00023 
00024 #ifndef COrderProperties_h_
00025 #define COrderProperties_h_
00026 
00027 BEGIN_NAMESPACE_PBORI
00028 
00033 template <class OrderType>
00034 class COrderProperties {
00035 
00036  public:
00038   typedef OrderType order_type;
00039 
00041 
00042   typedef typename order_type::lex_property lex_property; 
00043   typedef typename order_type::ordered_property ordered_property;
00044   typedef typename order_type::symmetry_property symmetry_property;
00045   typedef typename order_type::degorder_property degorder_property;
00046   typedef typename order_type::blockorder_property blockorder_property;
00047   typedef typename order_type::totaldegorder_property totaldegorder_property;
00048   typedef typename order_type::ascending_property ascending_property;
00049   typedef typename order_type::descending_property descending_property;
00050   typedef typename order_type::degrevlexorder_property degrevlexorder_property;
00052 
00054 
00055   typedef typename order_type::size_type size_type;
00056   typedef typename order_type::idx_type idx_type;
00057   typedef typename order_type::bool_type bool_type;
00058   typedef typename order_type::ostream_type ostream_type;
00059   typedef typename order_type::hash_type hash_type;
00061 
00063   enum { order_code = order_type::order_code };
00064 
00066   typedef typename order_type::idx_comparer_type idx_comparer_type;
00067   
00069   is_same_type<ordered_property, valid_tag> orderedStandardIteration;
00070 
00072   is_same_type<lex_property, valid_tag> isLexicographical;
00073 
00075   is_same_type<symmetry_property, valid_tag> isSymmetric;
00076 
00078   is_same_type<degorder_property, valid_tag> isDegreeOrder;
00079 
00081   is_same_type<blockorder_property, valid_tag> isBlockOrder;
00082 
00084   is_same_type<totaldegorder_property, valid_tag> isTotalDegreeOrder;
00085 
00087   is_same_type<ascending_property, valid_tag> ascendingVariables;
00088 
00090   is_same_type<descending_property, valid_tag> descendingVariables;
00091 
00093   is_same_type<degrevlexorder_property, valid_tag> 
00094   isDegreeReverseLexicographical;
00095 };
00096 
00097 
00098 END_NAMESPACE_PBORI
00099 
00100 #endif