PolyBoRi
|
00001 // -*- c++ -*- 00002 //***************************************************************************** 00063 //***************************************************************************** 00064 00065 // include basic definitions 00066 #include "pbori_defs.h" 00067 00068 // get all available orderings 00069 #include "LexOrder.h" 00070 #include "DegLexOrder.h" 00071 #include "DegRevLexAscOrder.h" 00072 #include "BlockDegLexOrder.h" 00073 #include "BlockDegRevLexAscOrder.h" 00074 00075 #ifndef pbori_order_h_ 00076 #define pbori_order_h_ 00077 00078 BEGIN_NAMESPACE_PBORI 00079 00080 inline PBORI_SHARED_PTR(CDynamicOrderBase) 00081 get_ordering(CTypes::ordercode_type order) { 00082 typedef PBORI_SHARED_PTR(CDynamicOrderBase) order_ptr; 00083 00084 if(order == CTypes::lp) 00085 return order_ptr(new CDynamicOrder<LexOrder>); 00086 else if(order == CTypes::dlex) 00087 return order_ptr(new CDynamicOrder<DegLexOrder>); 00088 else if(order == CTypes::dp_asc) 00089 return order_ptr(new CDynamicOrder<DegRevLexAscOrder>); 00090 else if(order == CTypes::block_dlex) 00091 return order_ptr(new CDynamicOrder<BlockDegLexOrder>); 00092 else if(order == CTypes::block_dp_asc) 00093 return order_ptr(new CDynamicOrder<BlockDegRevLexAscOrder>); 00094 00095 // default is lex order 00096 return order_ptr(new CDynamicOrder<LexOrder>); 00097 } 00098 00099 00102 template <class LhsType, class RhsType, class BinaryPredicate> 00103 class lex_compare_predicate: 00104 public std::binary_function<LhsType, RhsType, bool> { 00105 public: 00106 00108 lex_compare_predicate(const BinaryPredicate& comp): 00109 m_comp(comp) {} 00110 00112 bool operator()(const LhsType& lhs, const RhsType& rhs) const { 00113 return std::lexicographical_compare(lhs.begin(), lhs.end(), 00114 rhs.begin(), rhs.end(), m_comp); 00115 } 00116 00117 private: 00118 BinaryPredicate m_comp; 00119 }; 00120 00121 END_NAMESPACE_PBORI 00122 00123 #endif