Go to the documentation of this file.00001
00002
00039
00040
00041
00042 #include "pbori_defs.h"
00043
00044
00045 #include "COrderBase.h"
00046
00047 #ifndef BlockDegLexOrder_h_
00048 #define BlockDegLexOrder_h_
00049
00050 BEGIN_NAMESPACE_PBORI
00051
00057 class BlockDegLexOrder:
00058 public COrderBase {
00059
00060 public:
00061
00062
00063
00064
00066 typedef BlockDegLexOrder self;
00067
00069
00070 typedef valid_tag blockorder_property;
00071 typedef valid_tag descending_property;
00072 typedef block_dlex_tag order_tag;
00074
00076 typedef std::less<idx_type> idx_comparer_type;
00077
00079 enum { order_code = CTypes::block_dlex, baseorder_code = CTypes::dlex };
00080
00082 BlockDegLexOrder(): base(), m_indices() {
00083 m_indices.push_back(0);
00084 m_indices.push_back(CTypes::max_idx);
00085 };
00086
00088 BlockDegLexOrder(const self& rhs): base(rhs), m_indices(rhs.m_indices) {};
00089
00091 ~BlockDegLexOrder() {};
00092
00094 comp_type compare(idx_type, idx_type) const;
00095
00097 comp_type compare(const monom_type&, const monom_type&) const;
00098
00100 comp_type compare(const exp_type&, const exp_type&) const;
00101
00103 monom_type lead(const poly_type&) const;
00104
00106 monom_type lead(const poly_type& poly, size_type) const;
00107
00109 exp_type leadExp(const poly_type&) const;
00110
00112 exp_type leadExp(const poly_type&, size_type) const;
00113
00115 indirect_iterator leadIteratorBegin(const poly_type&) const;
00116 indirect_iterator leadIteratorEnd() const;
00117 indirect_exp_iterator leadExpIteratorBegin(const poly_type&) const;
00118 indirect_exp_iterator leadExpIteratorEnd() const;
00119
00121
00122 block_iterator blockBegin() const { return m_indices.begin() + 1; }
00123 block_iterator blockEnd() const { return m_indices.end(); }
00124 void appendBlock(idx_type idx) {
00125 m_indices.back() = idx;
00126 m_indices.push_back(CTypes::max_idx);
00127 }
00128 void clearBlocks() {
00129 m_indices.clear();
00130 m_indices.push_back(0);
00131 m_indices.push_back(CTypes::max_idx);
00132 }
00134
00135 private:
00136 block_idx_type m_indices;
00137 };
00138
00139
00140 END_NAMESPACE_PBORI
00141
00142 #endif // BlockDegLexOrder_h_