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