1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
7 -------------------------------------------------------------------------------
9 This file is part of OpenFOAM.
11 OpenFOAM is free software: you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by
13 the Free Software Foundation, either version 3 of the License, or
14 (at your option) any later version.
16 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
28 An ordered pair of two objects of type \<T\> with first() and second()
32 Foam::Tuple2 for storing two objects of dissimilar types.
34 \*---------------------------------------------------------------------------*/
39 #include "FixedList.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 /*---------------------------------------------------------------------------*\
48 Class Pair Declaration
49 \*---------------------------------------------------------------------------*/
54 public FixedList<Type, 2>
65 //- Construct from components
66 inline Pair(const Type& f, const Type& s)
72 //- Construct from Istream
73 inline Pair(Istream& is)
75 FixedList<Type, 2>(is)
82 inline const Type& first() const
84 return this->operator[](0);
90 return this->operator[](0);
94 inline const Type& second() const
96 return this->operator[](1);
100 inline Type& second()
102 return this->operator[](1);
105 //- Return reverse pair
106 inline Pair<Type> reversePair() const
108 return Pair<Type>(second(), first());
112 inline const Type& other(const Type& a) const
114 if (first() == second())
116 FatalErrorIn("Pair<Type>::other(const Type&) const")
117 << "Call to other only valid for Pair with differing"
118 << " elements:" << *this << abort(FatalError);
120 else if (first() == a)
128 FatalErrorIn("Pair<Type>::other(const Type&) const")
130 << " does not contain " << a << abort(FatalError);
141 // - -1: same pair, but reversed order
142 static inline int compare(const Pair<Type>& a, const Pair<Type>& b)
144 if (a[0] == b[0] && a[1] == b[1])
148 else if (a[0] == b[1] && a[1] == b[0])
161 friend bool operator==(const Pair<Type>& a, const Pair<Type>& b)
163 return (a.first() == b.first() && a.second() == b.second());
166 friend bool operator!=(const Pair<Type>& a, const Pair<Type>& b)
173 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
175 } // End namespace Foam
177 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
181 // ************************************************************************* //