PolyBoRi
COrderingTags.h
Go to the documentation of this file.
00001 // -*- c++ -*-
00002 //*****************************************************************************
00015 //*****************************************************************************
00016 
00017 // include basic definitions
00018 #include "pbori_defs.h"
00019 
00020 // include basic definitions for tags
00021 #include "pbori_tags.h"
00022 #include "order_tags.h"
00023 
00024 #ifndef COrderingTags_h_
00025 #define COrderingTags_h_
00026 
00027 BEGIN_NAMESPACE_PBORI
00028 
00034 template <class OrderTag,
00035           class LexProp, class DegOrderProp, class BlockOrderProp,
00036           class DescendingProp, 
00037           class OrderedProp = LexProp,
00038           class TotelDegOrderProp = DegOrderProp, 
00039           class SymmetryProp =  typename invert_tag<BlockOrderProp>::type >
00040 
00041 class COrderingTagsBase {
00042 public:
00043   typedef OrderTag order_tag;
00044   typedef LexProp lex_property; 
00045   typedef OrderedProp ordered_property;
00046   typedef SymmetryProp symmetry_property;
00047   typedef DegOrderProp degorder_property;
00048   typedef BlockOrderProp blockorder_property;
00049   typedef TotelDegOrderProp totaldegorder_property;
00050   typedef typename invert_tag<DescendingProp>::type ascending_property;
00051   typedef typename and_tag<DegOrderProp, ascending_property>::type
00052   degrevlexorder_property; 
00053   typedef DescendingProp descending_property;
00054 };
00055 
00056 template <class OrderTag, class DescProp>
00057 class CDegreeOrderingTags:
00058   public COrderingTagsBase <OrderTag, 
00059                             invalid_tag, valid_tag, invalid_tag, DescProp> {
00060 };
00061 
00062 template <class OrderTag, class DescProp>
00063 class CBlockDegreeOrderingTags:
00064   public COrderingTagsBase <OrderTag, 
00065                             invalid_tag, invalid_tag, valid_tag, DescProp> {
00066 };
00067 
00068 template <class OrderTag>
00069 class COrderingTags;
00070 
00071 template <>
00072 class COrderingTags<lex_tag>:
00073   public COrderingTagsBase <lex_tag, valid_tag, invalid_tag, invalid_tag, valid_tag> { };
00074 
00075 template <>
00076 class COrderingTags<dlex_tag>:
00077   public CDegreeOrderingTags <dlex_tag, valid_tag> { };
00078 
00079 
00080 template <>
00081 class COrderingTags<dp_asc_tag>:
00082   public CDegreeOrderingTags<dp_asc_tag, invalid_tag> { };
00083 
00084 template <>
00085 class COrderingTags<block_dlex_tag>:
00086   public CBlockDegreeOrderingTags<block_dlex_tag, valid_tag> { };
00087 
00088 
00089 template <>
00090 class COrderingTags<block_dp_asc_tag>:
00091   public CBlockDegreeOrderingTags<block_dp_asc_tag, invalid_tag> { };
00092 
00093 END_NAMESPACE_PBORI
00094 
00095 #endif