PolyBoRi
pbori_order.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
60 //*****************************************************************************
61 
62 // include basic definitions
63 #include "pbori_defs.h"
64 
65 #include "OrderedManager.h"
66 
67 // get all available orderings
68 #include "LexOrder.h"
69 #include "DegLexOrder.h"
70 #include "DegRevLexAscOrder.h"
71 #include "BlockDegLexOrder.h"
72 #include "BlockDegRevLexAscOrder.h"
73 
74 #ifndef pbori_order_h_
75 #define pbori_order_h_
76 
78 
79 inline PBORI_SHARED_PTR(CDynamicOrderBase)
80 get_ordering(CTypes::ordercode_type order) {
81  typedef PBORI_SHARED_PTR(CDynamicOrderBase) order_ptr;
82 
83  if(order == CTypes::lp)
84  return order_ptr(new CDynamicOrder<LexOrder>);
85  else if(order == CTypes::dlex)
86  return order_ptr(new CDynamicOrder<DegLexOrder>);
87  else if(order == CTypes::dp_asc)
88  return order_ptr(new CDynamicOrder<DegRevLexAscOrder>);
89  else if(order == CTypes::block_dlex)
90  return order_ptr(new CDynamicOrder<BlockDegLexOrder>);
91  else if(order == CTypes::block_dp_asc)
92  return order_ptr(new CDynamicOrder<BlockDegRevLexAscOrder>);
93 
94  // default is lex order
95  return order_ptr(new CDynamicOrder<LexOrder>);
96 }
97 
98 
101 template <class LhsType, class RhsType, class BinaryPredicate>
102 class lex_compare_predicate:
103  public std::binary_function<LhsType, RhsType, bool> {
104 public:
105 
107  lex_compare_predicate(const BinaryPredicate& comp):
108  m_comp(comp) {}
109 
111  bool operator()(const LhsType& lhs, const RhsType& rhs) const {
112  return std::lexicographical_compare(lhs.begin(), lhs.end(),
113  rhs.begin(), rhs.end(), m_comp);
114  }
115 
116 private:
117  BinaryPredicate m_comp;
118 };
119 
121 
122 #endif