Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

extended_pair.h

Go to the documentation of this file.
00001 /* -*- C++ -*-
00002  * lemon/bits/extended_pair.h - Part of LEMON, a generic C++ optimization library
00003  *
00004  * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
00005  * (Egervary Research Group on Combinatorial Optimization, EGRES).
00006  *
00007  * Permission to use, modify and distribute this software is granted
00008  * provided that this copyright notice appears in all copies. For
00009  * precise terms see the accompanying LICENSE file.
00010  *
00011  * This software is provided "AS IS" with no warranty of any kind,
00012  * express or implied, and with no claim as to its suitability for any
00013  * purpose.
00014  *
00015  */
00016 
00017 #ifndef LEMON_EXTENDED_PAIR_H
00018 #define LEMON_EXTENDED_PAIR_H
00019 
00023 
00024 namespace lemon {
00025   
00045   template <typename T1, typename A1, typename T2, typename A2>
00046   struct extended_pair {
00050     typedef T1 first_type;
00054     typedef T2 second_type;
00055 
00060     extended_pair() : first(), second() {}
00061 
00065     extended_pair(A1 f, A2 s) : first(f), second(s) {}
00066 
00071     template <class Pair>
00072     extended_pair(const Pair& pair) : first(pair.first), second(pair.second) {}
00073 
00077     T1 first;
00081     T2 second;
00082   };
00083 
00087   template <typename T1, typename T2, 
00088             typename LA1, typename LA2, typename RA1, typename RA2>
00089   bool operator==(const extended_pair<T1, LA1, T2, LA2>& left, 
00090                   const extended_pair<T1, RA1, T2, RA2>& right) {
00091     return left.first == right.first && left.second == right.second;
00092   }
00093 
00097   template <typename T1, typename T2, 
00098             typename LA1, typename LA2, typename RA1, typename RA2>
00099   bool operator!=(const extended_pair<T1, LA1, T2, LA2>& left, 
00100                   const extended_pair<T1, RA1, T2, RA2>& right) {
00101     return  !(left == right);
00102   }
00103 
00107   template <typename T1, typename T2, 
00108             typename LA1, typename LA2, typename RA1, typename RA2>
00109   bool operator<(const extended_pair<T1, LA1, T2, LA2>& left, 
00110                  const extended_pair<T1, RA1, T2, RA2>& right) {
00111     return left.first < right.first || 
00112       (!(right.first<left.first) && left.second < right.second);
00113   }
00114 
00118   template <typename T1, typename T2, 
00119             typename LA1, typename LA2, typename RA1, typename RA2>
00120   bool operator>(const extended_pair<T1, LA1, T2, LA2>& left, 
00121                  const extended_pair<T1, RA1, T2, RA2>& right) {
00122     return right < left;
00123   }
00124 
00128   template <typename T1, typename T2, 
00129             typename LA1, typename LA2, typename RA1, typename RA2>
00130   bool operator<=(const extended_pair<T1, LA1, T2, LA2>& left, 
00131                   const extended_pair<T1, RA1, T2, RA2>& right) {
00132     return !(right > left);
00133   }
00134 
00138   template <typename T1, typename T2, 
00139             typename LA1, typename LA2, typename RA1, typename RA2>
00140   bool operator>=(const extended_pair<T1, LA1, T2, LA2>& left, 
00141                   const extended_pair<T1, RA1, T2, RA2>& right) {
00142     return !(right < left);
00143   }
00144 
00145 }
00146 #endif

Generated on Sat Aug 27 14:14:50 2005 for LEMON by  doxygen 1.4.4