1 // -*- c++ -*- 2 //***************************************************************************** 3 /** @file pbori_order.h 4 * 5 * @author Alexander Dreyer 6 * @date 2006-05-23 7 * 8 * 9 * 10 * @par Copyright: 11 * (c) 2006 by The PolyBoRi Team 12 **/ 13 //***************************************************************************** 14 15 #ifndef polybori_orderings_pbori_order_h_ 16 #define polybori_orderings_pbori_order_h_ 17 18 // include basic definitions 19 #include <polybori/pbori_defs.h> 20 21 // Get infrastructure for dynamic orderings 22 #include "COrderingBase.h" 23 24 // get all available orderings 25 #include <polybori/LexOrder.h> 26 #include <polybori/DegLexOrder.h> 27 #include <polybori/DegRevLexAscOrder.h> 28 #include <polybori/BlockDegLexOrder.h> 29 #include <polybori/BlockDegRevLexAscOrder.h> 30 31 BEGIN_NAMESPACE_PBORI 32 33 inline std::shared_ptr<COrderingBase> get_ordering(CTypes::ordercode_type order)34get_ordering(CTypes::ordercode_type order) { 35 typedef std::shared_ptr<COrderingBase> order_ptr; 36 37 if(order == CTypes::lp) 38 return order_ptr(new LexOrder); 39 else if(order == CTypes::dlex) 40 return order_ptr(new DegLexOrder); 41 else if(order == CTypes::dp_asc) 42 return order_ptr(new DegRevLexAscOrder); 43 else if(order == CTypes::block_dlex) 44 return order_ptr(new BlockDegLexOrder); 45 else if(order == CTypes::block_dp_asc) 46 return order_ptr(new BlockDegRevLexAscOrder); 47 48 // default is lex order 49 return order_ptr(new LexOrder); 50 } 51 52 53 /// @class lex_compare_predicate 54 /// @brief defines lexicographic comparison functor 55 template <class LhsType, class RhsType, class BinaryPredicate> 56 class lex_compare_predicate: 57 public std::binary_function<LhsType, RhsType, bool> { 58 public: 59 60 /// Constructor lex_compare_predicate(const BinaryPredicate & comp)61 lex_compare_predicate(const BinaryPredicate& comp): 62 m_comp(comp) {} 63 64 /// Functor operation operator()65 bool operator()(const LhsType& lhs, const RhsType& rhs) const { 66 return std::lexicographical_compare(lhs.begin(), lhs.end(), 67 rhs.begin(), rhs.end(), m_comp); 68 } 69 70 private: 71 BinaryPredicate m_comp; 72 }; 73 74 END_NAMESPACE_PBORI 75 76 #endif 77