57 lines
2.2 KiB
C++
57 lines
2.2 KiB
C++
/*! \file pipair.h
|
|
* \brief pair
|
|
*
|
|
* This file declare PIPair
|
|
*/
|
|
/*
|
|
PIP - Platform Independent Primitives
|
|
pair
|
|
Ivan Pelipenko peri4ko@yandex.ru
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef PIPAIR_H
|
|
#define PIPAIR_H
|
|
|
|
#include "picout.h"
|
|
|
|
class PICout;
|
|
|
|
template<typename Type0, typename Type1>
|
|
class PIPair {
|
|
public:
|
|
PIPair() {first = Type0(); second = Type1();}
|
|
PIPair(std::tuple<Type0, Type1> tuple) {first = std::get<0>(tuple); second = std::get<1>(tuple);}
|
|
PIPair(const Type0 & value0, const Type1 & value1) {first = value0; second = value1;}
|
|
Type0 first;
|
|
Type1 second;
|
|
};
|
|
template<typename Type0, typename Type1>
|
|
inline bool operator <(const PIPair<Type0, Type1> & value0, const PIPair<Type0, Type1> & value1) {return value0.first < value1.first;}
|
|
template<typename Type0, typename Type1>
|
|
inline bool operator ==(const PIPair<Type0, Type1> & value0, const PIPair<Type0, Type1> & value1) {return (value0.first == value1.first) && (value0.second == value1.second);}
|
|
template<typename Type0, typename Type1>
|
|
inline bool operator !=(const PIPair<Type0, Type1> & value0, const PIPair<Type0, Type1> & value1) {return (value0.first != value1.first) || (value0.second != value1.second);}
|
|
|
|
#ifdef PIP_STD_IOSTREAM
|
|
template<typename Type0, typename Type1>
|
|
inline std::ostream & operator <<(std::ostream & s, const PIPair<Type0, Type1> & v) {s << "(" << v.first << ", " << v.second << ")"; return s;}
|
|
#endif
|
|
|
|
template<typename Type0, typename Type1>
|
|
inline PICout operator <<(PICout s, const PIPair<Type0, Type1> & v) {s.space(); s.setControl(0, true); s << "(" << v.first << ", " << v.second << ")"; s.restoreControl(); return s;}
|
|
|
|
#endif // PIPAIR_H
|