vbl_quadruple.h
Go to the documentation of this file.
1 // This is core/vbl/vbl_quadruple.h
2 #ifndef vbl_quadruple_h_
3 #define vbl_quadruple_h_
4 //:
5 // \file
6 // \brief a templated 4-tuple
7 // \author fsm
8 
9 #ifdef _MSC_VER
10 # include <vcl_msvc_warnings.h>
11 #endif
12 
13 //: a templated 4-tuple
14 template <class T1, class T2, class T3, class T4>
16 {
17  typedef T1 first_type;
18  typedef T2 second_type;
19  typedef T3 third_type;
20  typedef T4 fourth_type;
21 
22  T1 first;
23  T2 second;
24  T3 third;
25  T4 fourth;
26 
27  vbl_quadruple() = default;
28  vbl_quadruple(T1 const &a, T2 const &b, T3 const &c, T4 const &d)
29  : first (a)
30  , second(b)
31  , third (c)
32  , fourth(d) { }
33 
34 template <class U1, class U2, class U3, class U4>
36  : first (that.first )
37  , second(that.second)
38  , third (that.third )
39  , fourth(that.fourth) { }
40 };
41 
42 template <class T1, class T2, class T3, class T4>
44 {
45  return
46  x.first == y.first &&
47  x.second == y.second &&
48  x.third == y.third &&
49  x.fourth == y.fourth;
50 }
51 
52 template <class T1, class T2, class T3, class T4>
54 { return !(x == y); }
55 
56 template <class T1, class T2, class T3, class T4>
58 {
59  return x.first != y.first ? x.first < y.first :
60  x.second != y.second ? x.second < y.second :
61  x.third != y.third ? x.third < y.third :
62  x.fourth != y.fourth ? x.fourth < y.fourth :
63  false;
64 }
65 
66 template <class T1, class T2, class T3, class T4>
67 inline vbl_quadruple<T1, T2, T3, T4> vbl_make_quadruple(T1 const &x, T2 const &y, T3 const &z, T4 const &w)
68 {
69  return vbl_quadruple<T1, T2, T3, T4>(x, y, z, w);
70 }
71 
72 #endif // vbl_quadruple_h_
bool operator<(vbl_quadruple< T1, T2, T3, T4 > const &x, vbl_quadruple< T1, T2, T3, T4 > const &y)
Definition: vbl_quadruple.h:57
vbl_quadruple(vbl_quadruple< U1, U2, U3, U4 > const &that)
Definition: vbl_quadruple.h:35
bool operator!=(vbl_quadruple< T1, T2, T3, T4 > const &x, vbl_quadruple< T1, T2, T3, T4 > const &y)
Definition: vbl_quadruple.h:53
vbl_quadruple()=default
bool operator==(vbl_quadruple< T1, T2, T3, T4 > const &x, vbl_quadruple< T1, T2, T3, T4 > const &y)
Definition: vbl_quadruple.h:43
vbl_quadruple< T1, T2, T3, T4 > vbl_make_quadruple(T1 const &x, T2 const &y, T3 const &z, T4 const &w)
Definition: vbl_quadruple.h:67
vbl_quadruple(T1 const &a, T2 const &b, T3 const &c, T4 const &d)
Definition: vbl_quadruple.h:28
a templated 4-tuple.
Definition: vbl_quadruple.h:15