deba@703: // -*- c++ -*- deba@702: #ifndef EXTENDED_PAIR_H deba@702: #define EXTENDED_PAIR_H deba@702: deba@702: template deba@702: struct extended_pair { deba@702: typedef T1 first_type; deba@702: typedef T2 second_type; deba@702: deba@703: extended_pair() : first(), second() {} deba@703: deba@702: extended_pair(A1 f, A2 s) : first(f), second(s) {} deba@702: deba@703: template deba@703: extended_pair(const Pair& pair) : first(pair.first), second(pair.second) {} deba@703: deba@702: T1 first; deba@702: T2 second; deba@702: }; deba@702: deba@703: template deba@703: bool operator==(const extended_pair& left, deba@703: const extended_pair& right) { deba@703: return left.first == right.first && left.second == right.second; deba@703: } deba@703: deba@703: template deba@703: bool operator!=(const extended_pair& left, deba@703: const extended_pair& right) { deba@703: return !(left == right); deba@703: } deba@703: deba@703: template deba@703: bool operator<(const extended_pair& left, deba@703: const extended_pair& right) { deba@703: if (left.first == right.first) return left.second == right.second; deba@703: return left.first < right.first; deba@703: } deba@703: deba@703: template deba@703: bool operator>(const extended_pair& left, deba@703: const extended_pair& right) { deba@703: return right < left; deba@703: } deba@703: deba@703: template deba@703: bool operator<=(const extended_pair& left, deba@703: const extended_pair& right) { deba@703: return !(right > left); deba@703: } deba@703: deba@703: template deba@703: bool operator>=(const extended_pair& left, deba@703: const extended_pair& right) { deba@703: return !(right < left); deba@703: } deba@703: deba@703: deba@702: #endif