Changeset 1430:48b4f46f9d4e in lemon0.x
 Timestamp:
 05/19/05 13:53:25 (15 years ago)
 Branch:
 default
 Phase:
 public
 Convert:
 svn:c9d7d8f590d60310b91f818b3a526b0e/lemon/trunk@1904
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

src/lemon/bits/extended_pair.h
r1359 r1430 1 1 /* * C++ * 2 * src/lemon/ extended_pair.h  Part of LEMON, a generic C++ optimization library2 * src/lemon/bits/extended_pair.h  Part of LEMON, a generic C++ optimization library 3 3 * 4 4 * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport … … 18 18 #define LEMON_EXTENDED_PAIR_H 19 19 20 template <typename T1, typename A1, typename T2, typename A2> 21 struct extended_pair { 22 typedef T1 first_type; 23 typedef T2 second_type; 20 ///\ingroup misc 21 ///\file 22 ///\brief A more customizable pair type than std::pair. 24 23 25 extended_pair() : first(), second() {} 24 namespace lemon { 25 26 /// \brief A more customizable pair type than std::pair. 27 /// 28 /// This type is a customizable pair type. The main goal 29 /// is that the constructor's parameter type does not depend 30 /// on the stored data type. This way it is possible to store 31 /// references in the extended_pair. 32 /// \code 33 /// int a; char b; 34 /// typedef extended_pair<int&, int&, char&, char&> ICPair; 35 /// ICPair p(a, b); 36 /// // like a real reference to an std::pair<int, char> 37 /// // but the pair does not exist 38 /// p.first = 42; 39 /// p.second = '@'; 40 /// \endcode 41 /// \param T1 The type of first. 42 /// \param A1 The parameter type for first. 43 /// \param T2 The type of second. 44 /// \param A2 The parameter type for second. 45 template <typename T1, typename A1, typename T2, typename A2> 46 struct extended_pair { 47 /// \brief The type of first. 48 /// 49 /// The type of first. 50 typedef T1 first_type; 51 /// \brief The type of second. 52 /// 53 /// The type of second. 54 typedef T2 second_type; 26 55 27 extended_pair(A1 f, A2 s) : first(f), second(s) {} 56 /// \brief Default constructor. 57 /// 58 /// Default constructor. It calls the default constructor of 59 /// first and second. 60 extended_pair() : first(), second() {} 28 61 29 template <class Pair> 30 extended_pair(const Pair& pair) : first(pair.first), second(pair.second) {} 62 /// \brief Constructor. 63 /// 64 /// Constructor. 65 extended_pair(A1 f, A2 s) : first(f), second(s) {} 31 66 32 T1 first; 33 T2 second; 34 }; 67 /// \brief Template constructor. 68 /// 69 /// Template constructor. It copies everything which has 70 /// \c first and \c second member. 71 template <class Pair> 72 extended_pair(const Pair& pair) : first(pair.first), second(pair.second) {} 35 73 36 template <typename T1, typename T2, 37 typename LA1, typename LA2, typename RA1, typename RA2> 38 bool operator==(const extended_pair<T1, LA1, T2, LA2>& left, 39 const extended_pair<T1, RA1, T2, RA2>& right) { 40 return left.first == right.first && left.second == right.second; 74 /// \brief The first value 75 /// 76 /// The first value 77 T1 first; 78 /// \brief The second value 79 /// 80 /// The second value 81 T2 second; 82 }; 83 84 /// \brief Equality operator 85 /// 86 /// Equality operator 87 template <typename T1, typename T2, 88 typename LA1, typename LA2, typename RA1, typename RA2> 89 bool operator==(const extended_pair<T1, LA1, T2, LA2>& left, 90 const extended_pair<T1, RA1, T2, RA2>& right) { 91 return left.first == right.first && left.second == right.second; 92 } 93 94 /// \brief Inequality operator. 95 /// 96 /// Inequality operator. 97 template <typename T1, typename T2, 98 typename LA1, typename LA2, typename RA1, typename RA2> 99 bool operator!=(const extended_pair<T1, LA1, T2, LA2>& left, 100 const extended_pair<T1, RA1, T2, RA2>& right) { 101 return !(left == right); 102 } 103 104 /// \brief Less operator. 105 /// 106 /// Less operator. 107 template <typename T1, typename T2, 108 typename LA1, typename LA2, typename RA1, typename RA2> 109 bool operator<(const extended_pair<T1, LA1, T2, LA2>& left, 110 const extended_pair<T1, RA1, T2, RA2>& right) { 111 return left.first < right.first  112 (!(right.first<left.first) && left.second < right.second); 113 } 114 115 /// \brief Greater operator. 116 /// 117 /// Greater operator. 118 template <typename T1, typename T2, 119 typename LA1, typename LA2, typename RA1, typename RA2> 120 bool operator>(const extended_pair<T1, LA1, T2, LA2>& left, 121 const extended_pair<T1, RA1, T2, RA2>& right) { 122 return right < left; 123 } 124 125 /// \brief Less or equal operator. 126 /// 127 /// Less or equal operator. 128 template <typename T1, typename T2, 129 typename LA1, typename LA2, typename RA1, typename RA2> 130 bool operator<=(const extended_pair<T1, LA1, T2, LA2>& left, 131 const extended_pair<T1, RA1, T2, RA2>& right) { 132 return !(right > left); 133 } 134 135 /// \brief Greater or equal operator. 136 /// 137 /// Greater or equal operator. 138 template <typename T1, typename T2, 139 typename LA1, typename LA2, typename RA1, typename RA2> 140 bool operator>=(const extended_pair<T1, LA1, T2, LA2>& left, 141 const extended_pair<T1, RA1, T2, RA2>& right) { 142 return !(right < left); 143 } 144 41 145 } 42 43 template <typename T1, typename T2,44 typename LA1, typename LA2, typename RA1, typename RA2>45 bool operator!=(const extended_pair<T1, LA1, T2, LA2>& left,46 const extended_pair<T1, RA1, T2, RA2>& right) {47 return !(left == right);48 }49 50 template <typename T1, typename T2,51 typename LA1, typename LA2, typename RA1, typename RA2>52 bool operator<(const extended_pair<T1, LA1, T2, LA2>& left,53 const extended_pair<T1, RA1, T2, RA2>& right) {54 return left.first < right.first 55 (!(right.first<left.first) && left.second < right.second);56 }57 58 template <typename T1, typename T2,59 typename LA1, typename LA2, typename RA1, typename RA2>60 bool operator>(const extended_pair<T1, LA1, T2, LA2>& left,61 const extended_pair<T1, RA1, T2, RA2>& right) {62 return right < left;63 }64 65 template <typename T1, typename T2,66 typename LA1, typename LA2, typename RA1, typename RA2>67 bool operator<=(const extended_pair<T1, LA1, T2, LA2>& left,68 const extended_pair<T1, RA1, T2, RA2>& right) {69 return !(right > left);70 }71 72 template <typename T1, typename T2,73 typename LA1, typename LA2, typename RA1, typename RA2>74 bool operator>=(const extended_pair<T1, LA1, T2, LA2>& left,75 const extended_pair<T1, RA1, T2, RA2>& right) {76 return !(right < left);77 }78 79 80 146 #endif
Note: See TracChangeset
for help on using the changeset viewer.