PolyBoRi
|
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