00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TEUCHOS_TUPLE_HPP
00030 #define TEUCHOS_TUPLE_HPP
00031
00032
00033 #include "Teuchos_ArrayView.hpp"
00034
00035
00036 namespace Teuchos {
00037
00038
00053 template<typename T, int N>
00054 class Tuple : public ArrayView<T> {
00055 public:
00056
00059 inline Tuple();
00060
00063 Tuple( const Tuple<T,N> &t );
00064
00067 Tuple<T,N>& operator=( const Tuple<T,N> &t );
00068
00069 private:
00070
00071 T array_[N];
00072
00073 };
00074
00075
00080 template<typename T> inline
00081 Tuple<T,1> tuple(const T& a);
00082
00083
00088 template<typename T> inline
00089 Tuple<T,2> tuple(const T& a, const T& b);
00090
00091
00096 template<typename T> inline
00097 Tuple<T,3> tuple(const T& a, const T& b, const T& c);
00098
00099
00104 template<typename T> inline
00105 Tuple<T,4> tuple(const T& a, const T& b, const T& c, const T& d);
00106
00107
00112 template<typename T> inline
00113 Tuple<T,5> tuple(const T& a, const T& b, const T& c, const T& d, const T& e);
00114
00115
00120 template<typename T> inline
00121 Tuple<T,6> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00122 const T& f);
00123
00124
00129 template<typename T> inline
00130 Tuple<T,7> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00131 const T& f, const T& g);
00132
00133
00138 template<typename T> inline
00139 Tuple<T,8> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00140 const T& f, const T& g, const T& h);
00141
00142
00147 template<typename T> inline
00148 Tuple<T,9> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00149 const T& f, const T& g, const T& h, const T& i);
00150
00151
00156 template<typename T> inline
00157 Tuple<T,10> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00158 const T& f, const T& g, const T& h, const T& i, const T& j);
00159
00160
00165 template<typename T> inline
00166 Tuple<T,11> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00167 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k);
00168
00169
00174 template<typename T> inline
00175 Tuple<T,12> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00176 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k,
00177 const T& l);
00178
00179
00184 template<typename T> inline
00185 Tuple<T,13> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00186 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k,
00187 const T& l, const T& m);
00188
00189
00194 template<typename T> inline
00195 Tuple<T,14> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00196 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k,
00197 const T& l, const T& m, const T& n);
00198
00199
00204 template<typename T> inline
00205 Tuple<T,15> tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00206 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k,
00207 const T& l, const T& m, const T& n, const T& o);
00208
00209
00210
00211
00212
00213
00214
00215 template<typename T, int N> inline
00216 Tuple<T,N>::Tuple()
00217 :ArrayView<T>()
00218 {
00219 ArrayView<T>::operator=(ArrayView<T>(&array_[0],N));
00220 }
00221
00222
00223 template<typename T, int N>
00224 Tuple<T,N>::Tuple( const Tuple<T,N> &t )
00225 :ArrayView<T>()
00226 {
00227 for( int i = 0; i < N; ++i )
00228 array_[i] = t[i];
00229
00230
00231 ArrayView<T>::operator=(ArrayView<T>(&array_[0],N));
00232 }
00233
00234
00235 template<typename T, int N>
00236 Tuple<T,N>& Tuple<T,N>::operator=( const Tuple<T,N> &t )
00237 {
00238 for( int i = 0; i < N; ++i )
00239 array_[i] = t[i];
00240
00241
00242 return *this;
00243 }
00244
00245
00246 }
00247
00248
00249
00250
00251
00252
00253
00254 template<typename T> inline
00255 Teuchos::Tuple<T,1>
00256 Teuchos::tuple(const T& a)
00257 {
00258 Tuple<T,1> rtn;
00259 rtn[0] = a;
00260 return rtn;
00261 }
00262
00263
00264 template<typename T> inline
00265 Teuchos::Tuple<T,2>
00266 Teuchos::tuple(const T& a, const T& b)
00267 {
00268 Tuple<T,2> rtn;
00269 rtn[0] = a;
00270 rtn[1] = b;
00271 return rtn;
00272 }
00273
00274
00275 template<typename T> inline
00276 Teuchos::Tuple<T,3>
00277 Teuchos::tuple(const T& a, const T& b, const T& c)
00278 {
00279 Tuple<T,3> rtn;
00280 rtn[0] = a;
00281 rtn[1] = b;
00282 rtn[2] = c;
00283 return rtn;
00284 }
00285
00286
00287 template<typename T> inline
00288 Teuchos::Tuple<T,4>
00289 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d)
00290 {
00291 Tuple<T,4> rtn;;
00292 rtn[0] = a;
00293 rtn[1] = b;
00294 rtn[2] = c;
00295 rtn[3] = d;
00296 return rtn;
00297 }
00298
00299
00300 template<typename T> inline
00301 Teuchos::Tuple<T,5>
00302 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e)
00303 {
00304 Tuple<T,5> rtn;
00305 rtn[0] = a;
00306 rtn[1] = b;
00307 rtn[2] = c;
00308 rtn[3] = d;
00309 rtn[4] = e;
00310 return rtn;
00311 }
00312
00313
00314 template<typename T> inline
00315 Teuchos::Tuple<T,6>
00316 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00317 const T& f)
00318 {
00319 Tuple<T,6> rtn;
00320 rtn[0] = a;
00321 rtn[1] = b;
00322 rtn[2] = c;
00323 rtn[3] = d;
00324 rtn[4] = e;
00325 rtn[5] = f;
00326 return rtn;
00327 }
00328
00329
00330 template<typename T> inline
00331 Teuchos::Tuple<T,7>
00332 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00333 const T& f, const T& g)
00334 {
00335 Tuple<T,7> rtn;
00336 rtn[0] = a;
00337 rtn[1] = b;
00338 rtn[2] = c;
00339 rtn[3] = d;
00340 rtn[4] = e;
00341 rtn[5] = f;
00342 rtn[6] = g;
00343 return rtn;
00344 }
00345
00346
00347 template<typename T> inline
00348 Teuchos::Tuple<T,8>
00349 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00350 const T& f, const T& g, const T& h)
00351 {
00352 Tuple<T,8> rtn;
00353 rtn[0] = a;
00354 rtn[1] = b;
00355 rtn[2] = c;
00356 rtn[3] = d;
00357 rtn[4] = e;
00358 rtn[5] = f;
00359 rtn[6] = g;
00360 rtn[7] = h;
00361 return rtn;
00362 }
00363
00364
00365 template<typename T> inline
00366 Teuchos::Tuple<T,9>
00367 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00368 const T& f, const T& g, const T& h, const T& i)
00369 {
00370 Tuple<T,9> rtn;
00371 rtn[0] = a;
00372 rtn[1] = b;
00373 rtn[2] = c;
00374 rtn[3] = d;
00375 rtn[4] = e;
00376 rtn[5] = f;
00377 rtn[6] = g;
00378 rtn[7] = h;
00379 rtn[8] = i;
00380 return rtn;
00381 }
00382
00383
00384 template<typename T> inline
00385 Teuchos::Tuple<T,10>
00386 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00387 const T& f, const T& g, const T& h, const T& i, const T& j)
00388 {
00389 Tuple<T,10> rtn;
00390 rtn[0] = a;
00391 rtn[1] = b;
00392 rtn[2] = c;
00393 rtn[3] = d;
00394 rtn[4] = e;
00395 rtn[5] = f;
00396 rtn[6] = g;
00397 rtn[7] = h;
00398 rtn[8] = i;
00399 rtn[9] = j;
00400 return rtn;
00401 }
00402
00403
00404 template<typename T> inline
00405 Teuchos::Tuple<T,11>
00406 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00407 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k)
00408 {
00409 Tuple<T,11> rtn;
00410 rtn[0] = a;
00411 rtn[1] = b;
00412 rtn[2] = c;
00413 rtn[3] = d;
00414 rtn[4] = e;
00415 rtn[5] = f;
00416 rtn[6] = g;
00417 rtn[7] = h;
00418 rtn[8] = i;
00419 rtn[9] = j;
00420 rtn[10] = k;
00421 return rtn;
00422 }
00423
00424 template<typename T> inline
00425 Teuchos::Tuple<T,12>
00426 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00427 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k,
00428 const T& l)
00429 {
00430 Tuple<T,12> rtn;
00431 rtn[0] = a;
00432 rtn[1] = b;
00433 rtn[2] = c;
00434 rtn[3] = d;
00435 rtn[4] = e;
00436 rtn[5] = f;
00437 rtn[6] = g;
00438 rtn[7] = h;
00439 rtn[8] = i;
00440 rtn[9] = j;
00441 rtn[10] = k;
00442 rtn[11] = l;
00443 return rtn;
00444 }
00445
00446 template<typename T> inline
00447 Teuchos::Tuple<T,13>
00448 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00449 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k,
00450 const T& l, const T& m)
00451 {
00452 Tuple<T,13> rtn;
00453 rtn[0] = a;
00454 rtn[1] = b;
00455 rtn[2] = c;
00456 rtn[3] = d;
00457 rtn[4] = e;
00458 rtn[5] = f;
00459 rtn[6] = g;
00460 rtn[7] = h;
00461 rtn[8] = i;
00462 rtn[9] = j;
00463 rtn[10] = k;
00464 rtn[11] = l;
00465 rtn[12] = m;
00466 return rtn;
00467 }
00468
00469
00470 template<typename T> inline
00471 Teuchos::Tuple<T,14>
00472 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00473 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k,
00474 const T& l, const T& m, const T& n)
00475 {
00476 Tuple<T,14> rtn;
00477 rtn[0] = a;
00478 rtn[1] = b;
00479 rtn[2] = c;
00480 rtn[3] = d;
00481 rtn[4] = e;
00482 rtn[5] = f;
00483 rtn[6] = g;
00484 rtn[7] = h;
00485 rtn[8] = i;
00486 rtn[9] = j;
00487 rtn[10] = k;
00488 rtn[11] = l;
00489 rtn[12] = m;
00490 rtn[13] = n;
00491 return rtn;
00492 }
00493
00494
00495 template<typename T> inline
00496 Teuchos::Tuple<T,15>
00497 Teuchos::tuple(const T& a, const T& b, const T& c, const T& d, const T& e,
00498 const T& f, const T& g, const T& h, const T& i, const T& j, const T& k,
00499 const T& l, const T& m, const T& n, const T& o)
00500 {
00501 Tuple<T,15> rtn;
00502 rtn[0] = a;
00503 rtn[1] = b;
00504 rtn[2] = c;
00505 rtn[3] = d;
00506 rtn[4] = e;
00507 rtn[5] = f;
00508 rtn[6] = g;
00509 rtn[7] = h;
00510 rtn[8] = i;
00511 rtn[9] = j;
00512 rtn[10] = k;
00513 rtn[11] = l;
00514 rtn[12] = m;
00515 rtn[13] = n;
00516 rtn[14] = o;
00517 return rtn;
00518 }
00519
00520
00521 #endif // TEUCHOS_TUPLE_HPP