Chombo + EB
3.0
src
BaseTools
Tuple.H
Go to the documentation of this file.
1
#ifdef CH_LANG_CC
2
/*
3
* _______ __
4
* / ___/ / ___ __ _ / / ___
5
* / /__/ _ \/ _ \/ V \/ _ \/ _ \
6
* \___/_//_/\___/_/_/_/_.__/\___/
7
* Please refer to Copyright.txt, in Chombo's root directory.
8
*/
9
#endif
10
11
#ifndef _TUPLE_H_
12
#define _TUPLE_H_
13
14
#include <cstdlib>
15
#include "
CH_assert.H
"
16
#include "
BaseNamespaceHeader.H
"
17
using namespace
std
;
18
19
//
20
/// Ordered Tuples for Types T
21
/**
22
23
This class represents ordered tuples of some user-specified concrete
24
type T for N > 0. The type T must have a default constructor. If the
25
non-default constructor, copy constructor, or copy assignment operator
26
are used, T must also have a copy constructor.
27
*/
28
29
template
<
class
T,
size_t
N>
30
class
Tuple
31
{
32
public
:
33
34
/**: The default constructor. For user-defined types T, the
35
default constructor for T will be run on each of the N
36
objects in the Tuple. For builtin (intrinsic) types,
37
the values in the Tuple will be garbage.
38
*/
39
Tuple
();
40
41
/**: Constructs a Tuple, initializing the elements in the Tuple
42
with the corresponding elements in the vector v. This assumes
43
that v contains at least N elements of type T -- an assumption
44
that is NOT checked. For user-defined types, T must have a
45
well-defined and accessible copy constructor.
46
*/
47
//explicit Tuple (const T* v);
48
//
49
// The copy constructor.
50
//
51
Tuple
(
const
Tuple
& rhs);
52
//
53
// The copy assignment operator.
54
//
55
Tuple
& operator= (
const
Tuple
& rhs);
56
57
/**: Returns a modifiable lvalue reference to the i'th
58
element in the Tuple, counting from zero. Performs
59
range checking when the library is compiled in debug
60
mode. */
61
T& operator[] (
int
i);
62
63
/**: Returns a constant reference to the i'th element in the Tuple,
64
counting from zero. Performs range checking when the library
65
is compiled in debug mode.
66
*/
67
const
T& operator[] (
int
i)
const
;
68
69
/**: Returns the address of the underlying vector of T
70
representation. This should ONLY be used when interfacing
71
to Fortran as it breaks the encapsulation of the class.
72
*/
73
operator
const
T* ()
const
;
74
75
protected
:
76
//
77
// The underlying vector of T representing the Tuple.
78
//
79
T vect[N];
80
};
81
82
//
83
// Inlines.
84
//
85
86
template
<
class
T,
size_t
N>
87
inline
88
Tuple<T,N>::Tuple
()
89
{
90
}
91
92
template
<
class
T,
size_t
N>
93
inline
94
T&
95
Tuple<T,N>::operator[]
(
int
i)
96
{
97
CH_assert
(0 <= i && i < (
int
)N);
98
return
vect[i];
99
}
100
101
template
<
class
T,
size_t
N>
102
inline
103
const
T&
104
Tuple<T,N>::operator[]
(
int
i)
const
105
{
106
CH_assert
(0 <= i && i < (
int
)N);
107
return
vect[i];
108
}
109
110
template
<
class
T,
size_t
N>
111
inline
112
Tuple<T,N>::operator
const
T* ()
const
113
{
114
return
&vect[0];
115
}
116
117
//template <class T, size_t N>
118
//Tuple<T,N>::Tuple (const T* v)
119
//{
120
// CH_assert(v != 0);
121
// for (size_t i = 0; i < N; ++i)
122
// vect[i] = v[i];
123
//}
124
125
template
<
class
T,
size_t
N>
126
Tuple<T,N>::Tuple
(
const
Tuple<T,N>
& rhs)
127
{
128
for
(
size_t
i = 0; i < N; ++i)
129
vect[i] = rhs.
vect
[i];
130
}
131
132
template
<
class
T,
size_t
N>
133
Tuple<T,N>
&
134
Tuple<T,N>::operator=
(
const
Tuple<T,N>
& rhs)
135
{
136
for
(
size_t
i = 0; i < N; ++i)
137
vect[i] = rhs.
vect
[i];
138
return
*
this
;
139
}
140
141
#include "
BaseNamespaceFooter.H
"
142
#endif
/*CH_TUPLE_H*/
CH_assert
#define CH_assert(cond)
Definition:
CHArray.H:37
std
BaseNamespaceHeader.H
Tuple::Tuple
Tuple()
Definition:
Tuple.H:88
CH_assert.H
Tuple
Ordered Tuples for Types T.
Definition:
Tuple.H:30
Tuple::operator[]
T & operator[](int i)
Definition:
Tuple.H:95
Tuple::vect
T vect[N]
Definition:
Tuple.H:79
BaseNamespaceFooter.H
Tuple::operator=
Tuple & operator=(const Tuple &rhs)
Definition:
Tuple.H:134
Generated by
1.8.13