mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
Core: Tuple
git-svn-id: svn://ultimatepp.org/upp/trunk@2654 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
f09adcce58
commit
6a4ee4f8ae
3 changed files with 101 additions and 0 deletions
|
|
@ -230,6 +230,7 @@ NAMESPACE_UPP
|
|||
#include "BiCont.h"
|
||||
#include "Index.h"
|
||||
#include "Map.h"
|
||||
#include "Tuple.h"
|
||||
#include "Other.h"
|
||||
#include "Algo.h"
|
||||
#include "Vcont.hpp"
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ file
|
|||
Index.h,
|
||||
Map.h,
|
||||
Index.hpp,
|
||||
Tuple.h,
|
||||
Other.h,
|
||||
Hash.cpp optimize_speed,
|
||||
Concretes readonly separator,
|
||||
|
|
|
|||
99
uppsrc/Core/Tuple.h
Normal file
99
uppsrc/Core/Tuple.h
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
template <typename A, typename B>
|
||||
struct Tuple2 {
|
||||
A a;
|
||||
B b;
|
||||
|
||||
bool operator==(const Tuple2& x) const { return a == x.a && b == x.b; }
|
||||
bool operator!=(const Tuple2& x) const { return !operator==(x); }
|
||||
|
||||
int Compare(const Tuple2& x) const { return CombineCompare(a, x.a)(b, x.b); }
|
||||
bool operator<=(const Tuple2& x) const { return Compare(x) <= 0; }
|
||||
bool operator>=(const Tuple2& x) const { return Compare(x) >= 0; }
|
||||
bool operator<(const Tuple2& x) const { return Compare(x) != 0; }
|
||||
bool operator>(const Tuple2& x) const { return Compare(x) != 0; }
|
||||
|
||||
unsigned GetHashValue() const { return CombineHash(a, b); }
|
||||
|
||||
String ToString() const { return String().Cat() << '(' << a << ", " << b << ')'; }
|
||||
};
|
||||
|
||||
template <typename A, typename B>
|
||||
inline Tuple2<A, B> MakeTuple(const A& a, const B& b)
|
||||
{
|
||||
Tuple2<A, B> r;
|
||||
r.a = a;
|
||||
r.b = b;
|
||||
return r;
|
||||
}
|
||||
|
||||
template <typename A, typename B, typename C>
|
||||
struct Tuple3 {
|
||||
A a;
|
||||
B b;
|
||||
C c;
|
||||
|
||||
bool operator==(const Tuple3& x) const { return a == x.a && b == x.b && c == x.c; }
|
||||
bool operator!=(const Tuple3& x) const { return !operator==(x); }
|
||||
|
||||
int Compare(const Tuple3& x) const { return CombineCompare(a, x.a)(b, x.b)(c, x.c); }
|
||||
bool operator<=(const Tuple3& x) const { return Compare(x) <= 0; }
|
||||
bool operator>=(const Tuple3& x) const { return Compare(x) >= 0; }
|
||||
bool operator<(const Tuple3& x) const { return Compare(x) != 0; }
|
||||
bool operator>(const Tuple3& x) const { return Compare(x) != 0; }
|
||||
|
||||
unsigned GetHashValue() const { return CombineHash(a, b, c); }
|
||||
|
||||
String ToString() const { return String().Cat() << '(' << a << ", " << b << ", " << c << ')'; }
|
||||
};
|
||||
|
||||
template <typename A, typename B, typename C>
|
||||
inline Tuple3<A, B, C> MakeTuple(const A& a, const B& b, const C& c)
|
||||
{
|
||||
Tuple3<A, B, C> r;
|
||||
r.a = a;
|
||||
r.b = b;
|
||||
r.c = c;
|
||||
return r;
|
||||
}
|
||||
|
||||
template <typename A, typename B, typename C, typename D>
|
||||
struct Tuple4 {
|
||||
A a;
|
||||
B b;
|
||||
C c;
|
||||
D d;
|
||||
|
||||
bool operator==(const Tuple4& x) const { return a == x.a && b == x.b && c == x.c && d == x.d; }
|
||||
bool operator!=(const Tuple4& x) const { return !operator==(x); }
|
||||
|
||||
int Compare(const Tuple4& x) const { return CombineCompare(a, x.a)(b, x.b)(c, x.c)(d, x.d); }
|
||||
bool operator<=(const Tuple4& x) const { return Compare(x) <= 0; }
|
||||
bool operator>=(const Tuple4& x) const { return Compare(x) >= 0; }
|
||||
bool operator<(const Tuple4& x) const { return Compare(x) != 0; }
|
||||
bool operator>(const Tuple4& x) const { return Compare(x) != 0; }
|
||||
|
||||
unsigned GetHashValue() const { return CombineHash(a, b, c, d); }
|
||||
|
||||
String ToString() const { return String().Cat() << '(' << a << ", " << b << ", " << c << ", " << d << ')'; }
|
||||
};
|
||||
|
||||
template <typename A, typename B, typename C, typename D>
|
||||
inline Tuple4<A, B, C, D> MakeTuple(const A& a, const B& b, const C& c, const D& d)
|
||||
{
|
||||
Tuple4<A, B, C, D> r;
|
||||
r.a = a;
|
||||
r.b = b;
|
||||
r.c = c;
|
||||
r.d = d;
|
||||
return r;
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
inline T *FindTuple(T *x, int n, const U& key) {
|
||||
while(n--) {
|
||||
if(x->a == key)
|
||||
return x;
|
||||
x++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue