[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]

tuple.hxx
1/************************************************************************/
2/* */
3/* Copyright 1998-2002 by Ullrich Koethe */
4/* */
5/* This file is part of the VIGRA computer vision library. */
6/* The VIGRA Website is */
7/* http://hci.iwr.uni-heidelberg.de/vigra/ */
8/* Please direct questions, bug reports, and contributions to */
9/* ullrich.koethe@iwr.uni-heidelberg.de or */
10/* vigra@informatik.uni-hamburg.de */
11/* */
12/* Permission is hereby granted, free of charge, to any person */
13/* obtaining a copy of this software and associated documentation */
14/* files (the "Software"), to deal in the Software without */
15/* restriction, including without limitation the rights to use, */
16/* copy, modify, merge, publish, distribute, sublicense, and/or */
17/* sell copies of the Software, and to permit persons to whom the */
18/* Software is furnished to do so, subject to the following */
19/* conditions: */
20/* */
21/* The above copyright notice and this permission notice shall be */
22/* included in all copies or substantial portions of the */
23/* Software. */
24/* */
25/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND */
26/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES */
27/* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND */
28/* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT */
29/* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, */
30/* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING */
31/* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR */
32/* OTHER DEALINGS IN THE SOFTWARE. */
33/* */
34/************************************************************************/
35
36#ifndef VIGRA_TUPLE_HXX
37#define VIGRA_TUPLE_HXX
38
39#include <utility> // for pair
40
41 namespace vigra {
42
43/** \page TupleTypes Tuple Types
44
45 pair, triple, tuple4, tuple5
46
47 <b>\#include</b> <vigra/utilities.hxx><br>
48 Namespace: vigra
49
50 VIGRA defines tuple types \p vigra::triple, \p vigra::tuple4, \p vigra::tuple5.
51 In addition, \p std::pair is imported into namespace vigra from the C++ standard
52 library. All these types are defined similarly:
53
54 <ul>
55
56 <li> They are parameterized by the respective number of types. For each tuple,
57 a constructor is defined that takes that many arguments, e.g.:
58 \code
59 template <class First, class Second, class Third>
60 class Triple { ... };
61 \endcode
62 </li>
63 <li> A number of \p typedef's tells the types stored in the tuple:
64
65 \code
66 typedef ... first_type;
67 typedef ... second_type;
68 typedef ... third_type; // triple, tuple4, tuple5 only
69 typedef ... forth_type; // tuple4, tuple5 only
70 typedef ... fifth_type; // tuple5 only
71 \endcode
72 </li>
73 <li> Items are stored in the following public attributes:
74
75 \code
76
77 first;
78 second;
79 third; // triple, tuple4, tuple5 only
80 forth; // tuple4, tuple5 only
81 fifth; // tuple5 only
82
83 \endcode
84 </li>
85 </ul>
86
87
88*/
89
90/********************************************************/
91/* */
92/* pair */
93/* */
94/********************************************************/
95
96 using std::pair;
97
98/********************************************************/
99/* */
100/* triple */
101/* */
102/********************************************************/
103
104 template <class T1, class T2, class T3>
105 struct triple {
106 typedef T1 first_type;
107 typedef T2 second_type;
108 typedef T3 third_type;
109
110 T1 first;
111 T2 second;
112 T3 third;
113 triple() {}
114 triple(const T1& a, const T2& b, const T3& c)
115 : first(a), second(b), third(c) {}
116};
117
118 template <class T1, class T2, class T3>
119triple<T1,T2,T3> make_triple( T1 t1, T2 t2, T3 t3 )
120{ return triple<T1,T2,T3>( t1, t2, t3 ); }
121
122/********************************************************/
123/* */
124/* tuple4 */
125/* */
126/********************************************************/
127
128 template <class T1, class T2, class T3, class T4>
129 struct tuple4 {
130 typedef T1 first_type;
131 typedef T2 second_type;
132 typedef T3 third_type;
133 typedef T4 fourth_type;
134
135 T1 first;
136 T2 second;
137 T3 third;
138 T4 fourth;
139 tuple4() {}
140 tuple4(const T1& a, const T2& b, const T3& c, const T4& d)
141 : first(a), second(b), third(c), fourth(d) {}
142};
143
144 template <class T1, class T2, class T3, class T4>
145tuple4<T1,T2,T3,T4> make_tuple4( T1 t1, T2 t2, T3 t3, T4 t4 )
146{ return tuple4<T1,T2,T3,T4>( t1, t2, t3, t4 ); }
147
148/********************************************************/
149/* */
150/* tuple5 */
151/* */
152/********************************************************/
153
154 template <class T1, class T2, class T3, class T4, class T5>
155 struct tuple5 {
156 typedef T1 first_type;
157 typedef T2 second_type;
158 typedef T3 third_type;
159 typedef T4 fourth_type;
160 typedef T5 fifth_type;
161
162 T1 first;
163 T2 second;
164 T3 third;
165 T4 fourth;
166 T5 fifth;
167 tuple5() {}
168 tuple5(const T1& a, const T2& b, const T3& c, const T4& d, const T5& e)
169 : first(a), second(b), third(c), fourth(d), fifth(e) {}
170};
171
172 template <class T1, class T2, class T3, class T4, class T5>
173tuple5<T1,T2,T3,T4,T5> make_tuple5( T1 t1, T2 t2, T3 t3, T4 t4, T5 t5 )
174{ return tuple5<T1,T2,T3,T4,T5>( t1, t2, t3, t4, t5 ); }
175
176
177} // namespace vigra
178
179
180
181#endif /* VIGRA_TUPLE_HXX */
vigra

© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de) Heidelberg Collaboratory for Image Processing, University of Heidelberg, Germany | html generated using doxygen and Python vigra 1.12.1