// ============================================================================ // // Copyright (c) 2003 The CGAL Consortium // // This software and related documentation is part of an INTERNAL release // of the Computational Geometry Algorithms Library (CGAL). It is not // intended for general use. // // ---------------------------------------------------------------------------- // // release : $CGAL_Revision: $ // release_date : $CGAL_Date: $ // // file : utility.h // chapter : $CGAL_Chapter: STL Extensions for CGAL $ // package : $CGAL_Package: STL_Extension $ // source : stl_extension.fw // revision : $Revision$ // revision_date : $Date$ // author(s) : Michael Hoffmann // Lutz Kettner // Sylvain Pion // // maintainer : Michael Hoffmann // coordinator : ETH // // STL like utilities (Triple and such) // ============================================================================ #ifndef CGAL_UTILITY_H #define CGAL_UTILITY_H 1 #include CGAL_BEGIN_NAMESPACE //+---------------------------------------------------------------------+ //| Triple class | //+---------------------------------------------------------------------+ template struct Triple { typedef T1 first_type; typedef T2 second_type; typedef T3 third_type; T1 first; T2 second; T3 third; Triple() {} Triple(const T1& a, const T2& b, const T3& c) : first(a), second(b), third(c) {} template Triple(const U& a, const V& b, const W& c) : first(a), second(b), third(c) {} template Triple& operator=(const Triple &t) { first = t.first; second = t.second; third = t.third; return *this; } }; template inline Triple make_triple(const T1& x, const T2& y, const T3& z) { return Triple(x, y, z); } template inline bool operator==(const Triple& x, const Triple& y) { return ( (x.first == y.first) && (x.second == y.second) && (x.third == y.third) ); } template inline bool operator<(const Triple& x, const Triple& y) { return ( x.first < y.first || ( !(y.first < x.first) && ( x.second < y.second || ( !(y.second < x.second) && x.third < y.third ) ) ) ); } //+---------------------------------------------------------------------+ //| Quadruple class | //+---------------------------------------------------------------------+ template struct Quadruple { typedef T1 first_type; typedef T2 second_type; typedef T3 third_type; typedef T4 fourth_type; T1 first; T2 second; T3 third; T4 fourth; Quadruple() {} Quadruple(const T1& a, const T2& b, const T3& c, const T4& d) : first(a), second(b), third(c), fourth(d) {} template Quadruple(const U& a, const V& b, const W& c, const X& d) : first(a), second(b), third(c), fourth(d) {} template Quadruple& operator=(const Quadruple &q) { first = q.first; second = q.second; third = q.third; fourth = q.fourth; return *this; } }; template inline Quadruple make_quadruple(const T1& x, const T2& y, const T3& z, const T4& zz) { return Quadruple(x, y, z, zz); } template inline bool operator==(const Quadruple& x, const Quadruple& y) { return ( (x.first == y.first) && (x.second == y.second) && (x.third == y.third) && (x.fourth == y.fourth) ); } template inline bool operator<(const Quadruple& x, const Quadruple& y) { return ( x.first < y.first || ( !(y.first < x.first) && ( x.second < y.second || ( !(y.second < x.second) && ( x.third < y.third || !(y.third < x.third) && x.fourth < y.fourth) ) ) ) ); } CGAL_END_NAMESPACE #endif // CGAL_UTILITY_H // // EOF //