Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tuple.h
Go to the documentation of this file.
1 /* *******************************************************************
2  * Rocstar Simulation Suite *
3  * Copyright@2015, Illinois Rocstar LLC. All rights reserved. *
4  * *
5  * Illinois Rocstar LLC *
6  * Champaign, IL *
7  * www.illinoisrocstar.com *
8  * sales@illinoisrocstar.com *
9  * *
10  * License: See LICENSE file in top level of distribution package or *
11  * http://opensource.org/licenses/NCSA *
12  *********************************************************************/
13 /* *******************************************************************
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES *
16  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
17  * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR *
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
20  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
21  * USE OR OTHER DEALINGS WITH THE SOFTWARE. *
22  *********************************************************************/
23 // $Id: Tuple.h,v 1.5 2008/12/06 08:43:26 mtcampbe Exp $
24 
25 #ifndef RFC_TUPLE_H
26 #define RFC_TUPLE_H
27 
28 #include "rfc_basic.h"
29 
31 
32 template <class T>
33 struct Tuple_traits {
34  typedef T Value;
35  typedef const T Value_opposite;
36  typedef T* Pointer;
37  typedef const T* Const_pointer;
38  typedef T& Reference;
39  typedef const T& Init_reference;
40  typedef const T& Const_reference;
41  typedef T* Pointer_equivalent;
42  static Reference ref(Pointer_equivalent p) { return *p; }
43 };
44 
45 template <class T>
46 struct Tuple_traits<const T> {
47  typedef const T Value;
48  typedef T Value_opposite;
49  typedef const T* const Pointer;
50  typedef const T* const Const_pointer;
51  typedef const T& Reference;
52  typedef const T& Init_reference;
53  typedef const T& Const_reference;
54  typedef const T* Pointer_equivalent;
55  static Reference ref(Pointer_equivalent p) { return *p; }
56 };
57 
58 
59 template <class T>
60 struct Tuple_traits<T*> {
61  typedef T* Value;
62  typedef const T* Value_opposite;
63  typedef T** Pointer;
64  typedef const T** Const_pointer;
65  typedef T*& Reference;
66  typedef T* Init_reference;
67  typedef const T*& Const_reference;
68  typedef T** Pointer_equivalent;
69  static Reference ref(Pointer_equivalent p) { return *p; }
70 };
71 
72 template <class T>
73 struct Tuple_traits<const T*> {
74  typedef const T* Value;
75  typedef T* Value_opposite;
76  typedef T** const Pointer;
77  typedef const T** const Const_pointer;
78  typedef const T*& Reference;
79  typedef const T* Init_reference;
80  typedef const T*& Const_reference;
81  typedef const T** Pointer_equivalent;
82  static Reference ref(Pointer_equivalent p) { return *p; }
83 };
84 
85 template <class T>
86 struct Tuple_traits<T&> {
87  typedef T& Value;
88  typedef const T& Value_opposite;
89  typedef T* Pointer;
90  typedef const T* Const_pointer;
91  typedef T& Reference;
92  typedef T& Init_reference;
93  typedef const T& Const_reference;
94  typedef T** Pointer_equivalent;
95  static Reference ref(Pointer_equivalent p) { return **p; }
96 };
97 
98 template <class T>
99 struct Tuple_traits<const T&> {
100  typedef const T& Value;
101  typedef T& Value_opposite;
102  typedef T * const Pointer;
103  typedef const T * const Const_pointer;
104  typedef const T& Reference;
105  typedef const T& Init_reference;
106  typedef const T& Const_reference;
107  typedef const T** Pointer_equivalent;
108  static Reference ref(Pointer_equivalent p) { return **p; }
109 };
110 
111 
112 template <class T>
113 struct Tuple_traits<T*&> {
114  typedef T*& Value;
115  typedef const T*& Value_opposite;
116  typedef T** Pointer;
117  typedef const T** Const_pointer;
118  typedef T*& Reference;
119  typedef T*& Init_reference;
120  typedef const T*& Const_reference;
121  typedef T** Pointer_equivalent;
122  static Reference ref(Pointer_equivalent p) { return **p; }
123 };
124 
125 template <class T>
126 struct Tuple_traits<const T*&> {
127  typedef const T*& Value;
128  typedef T*& Value_opposite;
129  typedef T** const Pointer;
130  typedef const T** const Const_pointer;
131  typedef const T*& Reference;
132  typedef const T*& Init_reference;
133  typedef const T*& Const_reference;
134  typedef const T** Pointer_equivalent;
135  static Reference ref(Pointer_equivalent p) { return **p; }
136 };
137 
138 template < class T >
139 struct Two_tuple {
141  typedef typename Traits::Value Value;
143  typedef typename Traits::Pointer Pointer;
145  typedef typename Traits::Reference Reference;
149 
152 
155  : v0(p), v1(q) {}
156  explicit Two_tuple( Const_reference t) : v0(t), v1(t) {}
157 
159  return Traits::ref(reinterpret_cast<Pointer_equivalent>
160  (const_cast<Self*>(this))+i);
161  }
163  return Traits::ref(reinterpret_cast<Pointer_equivalent>(this)+(i&1));
164  }
165 
166  int dimension() const { return 2; }
167  int id() const { return static_cast<int>(this); }
168  bool operator==( const Self& x) const { return v0==x.v0 && v1==x.v1; }
169  bool operator!=( const Self& x) const { return v0!=x.v0 || v1!=x.v1; }
170 
171  std::ostream& print(std::ostream &os, const char* s) const {
172  switch(os.iword(IO::mode)) {
173  case IO::ASCII :
174  return os << v0 << ' ' << v1;
175  case IO::BINARY :
176  return os << v0 << v1;
177  default:
178  return os << s << "(" << v0 << ' ' << v1 << ' ' << ")";
179  }
180  }
181 
182  operator Const_self&() const
183  { return reinterpret_cast<Const_self&>(*this); }
184 
185  Self operator+( const Self& t) const
186  { return Self( v0+t.v0, v1+t.v1); }
187 
188  Self operator-( const Self& t) const
189  { return Self( v0-t.v0, v1-t.v1); }
190 
191  Self& operator+=( const Self &t)
192  { v0+=t.v0; v1+=t.v1; return *this; }
193 
194  Self& operator-=( const Self &t)
195  { v0-=t.v0; v1-=t.v1; return *this; }
196 
197  Value operator*( const Self& t) const
198  { return v0*t.v0+v1*t.v1; }
199 
201  { v0*=t; v1*=t; return *this; }
202 
204  { return Self( v0/t, v1/t); }
205 
207  { v0/=t; v1/=t; return *this; }
208 
209  Self multiply(const Self &b) const {
210  return Self( v0 *b.v0, v1 *b.v1);
211  }
212 
213  Self divide(const Self &b) const {
214  return Self( b.v0==Value(0) ? Value(0) : v0 /b.v0,
215  b.v1==Value(0) ? Value(0) : v1 /b.v1);
216  }
217 
218 protected:
221 };
222 
223 
224 template < class T >
225 std::ostream &operator<<(std::ostream &os, const Two_tuple<T> &s)
226 {
227  return s.print(os, "Two_tuple");
228 }
229 
230 
231 template < class T >
232 std::istream &operator>>(std::istream &is, Two_tuple<T> &s)
233 {
234  is >> s[0] >> s[1];
235  return is;
236 }
237 
238 template < class T >
240 {
241  return Two_tuple<T>( a *s[0], a*s[1]);
242 }
243 
244 template < class T >
245 struct Three_tuple {
247  typedef typename Traits::Value Value;
249  typedef typename Traits::Pointer Pointer;
251  typedef typename Traits::Reference Reference;
255 
258 
261  : v0(p), v1(q), v2(r) {}
262  explicit Three_tuple( Const_reference t) : v0(t), v1(t), v2(t) {}
263 
264  bool operator==( const Self& x) const
265  { return v0==x.v0 && v1==x.v1 && v2==x.v2; }
266  bool operator!=( const Self& x) const
267  { return v0!=x.v0 || v1!=x.v1 || v2!=x.v2; }
268 
270  return Traits::ref(reinterpret_cast<Pointer_equivalent>
271  (const_cast<Self*>(this))+i);
272  }
274  return Traits::ref(reinterpret_cast<Pointer_equivalent>(this)+i);
275  }
276 
277  int id() const { return static_cast<int>(this); }
278  int dimension() const { return 3; }
279 
280  std::ostream& print(std::ostream &os, const char *s) const {
281  switch(os.iword(IO::mode)) {
282  case IO::ASCII :
283  return os << v0 << ' ' << v1 << ' ' << v2;
284  case IO::BINARY :
285  return os << v0 << v1 << v2;
286  default:
287  return os << s << "(" << v0 << ' ' << v1
288  << ' ' << v2 << ' ' << ")";
289  }
290  }
291 
292  operator Const_self&() const
293  { return reinterpret_cast<Const_self&>(*this); }
294 
295  Self operator+( const Self& t) const
296  { return Self( v0+t.v0, v1+t.v1, v2+t.v2); }
297 
298  Self operator-( const Self& t) const
299  { return Self( v0-t.v0, v1-t.v1, v2-t.v2); }
300 
301  Self& operator+=( const Self &t)
302  { v0+=t.v0; v1+=t.v1; v2+=t.v2; return *this; }
303 
304  Self& operator-=( const Self &t)
305  { v0-=t.v0; v1-=t.v1; v2-=t.v2; return *this; }
306 
307  Value operator*( const Self& t) const
308  { return v0*t.v0+v1*t.v1+v2*t.v2; }
309 
311  { v0*=t; v1*=t; v2*=t; return *this; }
312 
314  { return Self( v0/t, v1/t, v2/t); }
315 
317  { v0/=t; v1/=t; v2/=t; return *this; }
318 
319  Self multiply(const Self &b) const {
320  return Self( v0 *b.v0, v1 *b.v1, v2 *b.v2);
321  }
322 
323  Self divide(const Self &b) const {
324  return Self( b.v0==Value(0) ? Value(0) : v0 /b.v0,
325  b.v1==Value(0) ? Value(0) : v1 /b.v1,
326  b.v2==Value(0) ? Value(0) : v2 /b.v2);
327  }
328 protected:
332 };
333 
334 
335 template < class T >
336 std::ostream &operator<<(std::ostream &os, const Three_tuple<T> &s)
337 {
338  return s.print(os, "Three_tuple");
339 }
340 
341 template < class T >
342 std::istream &operator>>(std::istream &is, Three_tuple<T> &s)
343 {
344  is >> s[0] >> s[1] >> s[2];
345  return is;
346 }
347 
348 template < class T >
350 {
351  return Three_tuple<T>( a*s[0], a*s[1], a*s[2]);
352 }
353 
354 template < class T >
355 struct Four_tuple {
357  typedef typename Traits::Value Value;
359  typedef typename Traits::Pointer Pointer;
361  typedef typename Traits::Reference Reference;
365 
368 
372  : v0(p), v1(q), v2(r), v3(s) {}
373  explicit Four_tuple( Const_reference t) : v0(t), v1(t), v2(t), v3(t) {}
374 
375  bool operator==( const Self& x) const
376  { return v0==x.v0 && v1==x.v1 && v2==x.v2 && v3==x.v3; }
377  bool operator!=( const Self& x) const
378  { return v0!=x.v0 || v1!=x.v1 || v2!=x.v2 || v3!=x.v3; }
379 
381  return Traits::ref(reinterpret_cast<Pointer_equivalent>
382  (const_cast<Self*>(this))+i);
383  }
385  return Traits::ref(reinterpret_cast<Pointer_equivalent>(this)+i);
386  }
387 
388  int id() const { return static_cast<int>(this); }
389  int dimension() const { return 4; }
390 
391  std::ostream& print(std::ostream &os, const char *s) const {
392  switch(os.iword(IO::mode)) {
393  case IO::ASCII :
394  return os << v0 << ' ' << v1 << ' ' << v2 << ' ' << v3;
395  case IO::BINARY :
396  return os << v0 << v1 << v2 << v3;
397  default:
398  return os << s << "(" << v0 << ' ' << v1
399  << ' ' << v2 << ' ' << v3 << ")";
400  }
401  }
402 
403  operator Const_self&() const
404  { return reinterpret_cast<Const_self&>(*this); }
405 
406  Self operator+( const Self& t) const
407  { return Self( v0+t.v0, v1+t.v1, v2+t.v2, v3+t.v3); }
408  Self operator-( const Self& t) const
409  { return Self( v0-t.v0, v1-t.v1, v2-t.v2, v3-t.v3); }
410  Self& operator+=( const Self &t)
411  { v0+=t.v0; v1+=t.v1; v2+=t.v2; v3+=t.v3; return *this; }
412  Self& operator-=( const Self &t)
413  { v0-=t.v0; v1-=t.v1; v2-=t.v2; v3-=t.v3; return *this; }
414  Value operator*( const Self& t) const
415  { return v0*t.v0 + v1*t.v1 + v2*t.v2 + v3*t.v3; }
416 
418  { v0*=t; v1*=t; v2*=t; v3*=t; return *this; }
419 
421  { return Self( v0/t, v1/t, v2/t, v3/t); }
422 
424  { v0/=t; v1/=t; v2/=t; v3/=t; return *this; }
425 
426  Self multiply(const Self &b) const {
427  return Self( v0 *b.v0, v1 *b.v1, v2 *b.v2, v3 *b.v3);
428  }
429 
430  Self divide(const Self &b) const {
431  return Self( b.v0==Value(0) ? Value(0) : v0 /b.v0,
432  b.v1==Value(0) ? Value(0) : v1 /b.v1,
433  b.v2==Value(0) ? Value(0) : v2 /b.v2,
434  b.v3==Value(0) ? Value(0) : v3 /b.v3);
435  }
436 protected:
441 };
442 
443 template < class T >
444 std::ostream &operator<<(std::ostream &os, const Four_tuple<T> &s)
445 {
446  return s.print(os, "Four_tuple");
447 }
448 
449 template < class T >
450 std::istream &operator>>(std::istream &is, Four_tuple<T> &s)
451 {
452  is >> s[0] >> s[1] >> s[2] >> s[3];
453  return is;
454 }
455 
456 template < class T >
458 {
459  return Four_tuple<T>( a*s[0], a*s[1], a*s[2], a*s[3]);
460 }
461 
463 
464 #endif // RFC_TUPLE_H
465 
466 
467 
468 
469 
470 
Traits::Value Value
Definition: Tuple.h:141
Reference operator[](int i)
Definition: Tuple.h:162
Traits::Value_opposite Value_opposite
Definition: Tuple.h:248
Self operator-(const Self &t) const
Definition: Tuple.h:188
Traits::Value_opposite Value_opposite
Definition: Tuple.h:358
Self operator/(Const_reference t) const
Definition: Tuple.h:313
Self operator+(const Self &t) const
Definition: Tuple.h:185
const T *& Reference
Definition: Tuple.h:78
const T Value_opposite
Definition: Tuple.h:35
Self multiply(const Self &b) const
Definition: Tuple.h:426
Self operator-(const Self &t) const
Definition: Tuple.h:298
A structure used to represent element faces.
Definition: Pane_boundary.C:60
const T & Reference
Definition: Tuple.h:51
Vector_3< T > operator*(T t, const Vector_3< T > &v)
Definition: mapbasic.h:139
std::ostream & print(std::ostream &os, const char *s) const
Definition: Tuple.h:280
const T & Const_reference
Definition: Tuple.h:53
bool operator!=(const Self &x) const
Definition: Tuple.h:169
Value v0
Definition: Tuple.h:329
Traits::Const_reference Const_reference
Definition: Tuple.h:146
Traits::Pointer_equivalent Pointer_equivalent
Definition: Tuple.h:254
Self & operator*=(Const_reference t)
Definition: Tuple.h:310
Three_tuple< T > Self
Definition: Tuple.h:256
Const_reference operator[](int i) const
Definition: Tuple.h:158
Value v0
Definition: Tuple.h:437
int id() const
Definition: Tuple.h:388
Traits::Pointer Pointer
Definition: Tuple.h:143
int id() const
Definition: Tuple.h:277
Value v1
Definition: Tuple.h:438
const T *& Const_reference
Definition: Tuple.h:67
Self multiply(const Self &b) const
Definition: Tuple.h:319
Self multiply(const Self &b) const
Definition: Tuple.h:209
double s
Definition: blastest.C:80
const T * Value_opposite
Definition: Tuple.h:62
static Reference ref(Pointer_equivalent p)
Definition: Tuple.h:122
Value operator*(const Self &t) const
Definition: Tuple.h:197
const T & Const_reference
Definition: Tuple.h:106
bool operator!=(const Self &x) const
Definition: Tuple.h:266
const Two_tuple< Value_opposite > Const_self
Definition: Tuple.h:151
Traits::Value_opposite Value_opposite
Definition: Tuple.h:142
const T & Const_reference
Definition: Tuple.h:40
const Two_tuple< Value_opposite > Const_self
Definition: Tuple.h:367
static Reference ref(Pointer_equivalent p)
Definition: Tuple.h:42
const T *const Const_pointer
Definition: Tuple.h:103
Value operator*(const Self &t) const
Definition: Tuple.h:307
Traits::Init_reference Init_reference
Definition: Tuple.h:253
Self & operator+=(const Self &t)
Definition: Tuple.h:301
Value v3
Definition: Tuple.h:440
static Reference ref(Pointer_equivalent p)
Definition: Tuple.h:135
const Three_tuple< Value_opposite > Const_self
Definition: Tuple.h:257
Self & operator-=(const Self &t)
Definition: Tuple.h:194
Tuple_traits< T > Traits
Definition: Tuple.h:140
Traits::Const_pointer Const_pointer
Definition: Tuple.h:144
const T * Pointer_equivalent
Definition: Tuple.h:54
Self operator-(const Self &t) const
Definition: Tuple.h:408
Definition: io.h:64
const T **const Const_pointer
Definition: Tuple.h:130
Traits::Const_reference Const_reference
Definition: Tuple.h:252
Four_tuple()
Definition: Tuple.h:369
#define RFC_END_NAME_SPACE
Definition: rfc_basic.h:29
T * Init_reference
Definition: Tuple.h:66
Two_tuple(Init_reference p, Init_reference q)
Definition: Tuple.h:154
const T *& Const_reference
Definition: Tuple.h:133
const T & Value_opposite
Definition: Tuple.h:88
Traits::Reference Reference
Definition: Tuple.h:251
Traits::Reference Reference
Definition: Tuple.h:145
Reference operator[](int i)
Definition: Tuple.h:273
Self operator/(Const_reference t) const
Definition: Tuple.h:420
const T ** Pointer_equivalent
Definition: Tuple.h:81
Self & operator/=(Const_reference t)
Definition: Tuple.h:316
T * Pointer
Definition: Tuple.h:36
Tuple_traits< T > Traits
Definition: Tuple.h:246
const T ** Const_pointer
Definition: Tuple.h:117
const T * Const_pointer
Definition: Tuple.h:90
Traits::Pointer Pointer
Definition: Tuple.h:249
const T ** Pointer_equivalent
Definition: Tuple.h:107
const T *const Pointer
Definition: Tuple.h:49
const T ** Pointer_equivalent
Definition: Tuple.h:134
Tuple_traits< T > Traits
Definition: Tuple.h:356
int id() const
Definition: Tuple.h:167
Self & operator+=(const Self &t)
Definition: Tuple.h:410
static Reference ref(Pointer_equivalent p)
Definition: Tuple.h:55
blockLoc i
Definition: read.cpp:79
#define RFC_BEGIN_NAME_SPACE
Definition: rfc_basic.h:28
void int int REAL * x
Definition: read.cpp:74
Traits::Pointer_equivalent Pointer_equivalent
Definition: Tuple.h:148
Traits::Init_reference Init_reference
Definition: Tuple.h:147
Self & operator*=(Const_reference t)
Definition: Tuple.h:200
bool operator==(const Self &x) const
Definition: Tuple.h:168
Traits::Const_pointer Const_pointer
Definition: Tuple.h:250
const T *& Const_reference
Definition: Tuple.h:80
int dimension() const
Definition: Tuple.h:278
Traits::Const_reference Const_reference
Definition: Tuple.h:362
static int mode
Definition: io.h:63
const T * Const_pointer
Definition: Tuple.h:37
Definition: io.h:64
Value v1
Definition: Tuple.h:330
Two_tuple()
Definition: Tuple.h:153
Three_tuple()
Definition: Tuple.h:259
Traits::Reference Reference
Definition: Tuple.h:361
Two_tuple(Const_reference t)
Definition: Tuple.h:156
Self & operator-=(const Self &t)
Definition: Tuple.h:412
Traits::Pointer_equivalent Pointer_equivalent
Definition: Tuple.h:364
static Reference ref(Pointer_equivalent p)
Definition: Tuple.h:108
Four_tuple(Const_reference t)
Definition: Tuple.h:373
bool operator!=(const Self &x) const
Definition: Tuple.h:377
Self divide(const Self &b) const
Definition: Tuple.h:430
T ** Pointer_equivalent
Definition: Tuple.h:68
const T ** Const_pointer
Definition: Tuple.h:64
Three_tuple(Init_reference p, Init_reference q, Init_reference r)
Definition: Tuple.h:260
bool operator==(const Self &x) const
Definition: Tuple.h:264
Three_tuple(Const_reference t)
Definition: Tuple.h:262
Value v2
Definition: Tuple.h:439
const T *& Init_reference
Definition: Tuple.h:132
Value v1
Definition: Tuple.h:220
Two_tuple< T > Self
Definition: Tuple.h:150
Self & operator/=(Const_reference t)
Definition: Tuple.h:423
Self operator+(const Self &t) const
Definition: Tuple.h:406
int dimension() const
Definition: Tuple.h:389
int dimension() const
Definition: Tuple.h:166
Self divide(const Self &b) const
Definition: Tuple.h:323
Value v0
Definition: Tuple.h:219
const T * Init_reference
Definition: Tuple.h:79
NT q
static Reference ref(Pointer_equivalent p)
Definition: Tuple.h:82
const T **const Const_pointer
Definition: Tuple.h:77
Traits::Value Value
Definition: Tuple.h:357
T ** Pointer_equivalent
Definition: Tuple.h:94
Const_reference operator[](int i) const
Definition: Tuple.h:380
T & Init_reference
Definition: Tuple.h:92
Self & operator*=(Const_reference t)
Definition: Tuple.h:417
Traits::Pointer Pointer
Definition: Tuple.h:359
const T & Init_reference
Definition: Tuple.h:105
T * Pointer_equivalent
Definition: Tuple.h:41
Four_tuple(Init_reference p, Init_reference q, Init_reference r, Init_reference s)
Definition: Tuple.h:370
Value operator*(const Self &t) const
Definition: Tuple.h:414
Traits::Init_reference Init_reference
Definition: Tuple.h:363
Traits::Const_pointer Const_pointer
Definition: Tuple.h:360
std::istream & operator>>(std::istream &is, CGAL::Aff_transformation_2< R > &t)
std::ostream & print(std::ostream &os, const char *s) const
Definition: Tuple.h:391
Value v2
Definition: Tuple.h:331
T ** Pointer_equivalent
Definition: Tuple.h:121
const T & Init_reference
Definition: Tuple.h:39
static Reference ref(Pointer_equivalent p)
Definition: Tuple.h:95
Four_tuple< T > Self
Definition: Tuple.h:366
Self operator+(const Self &t) const
Definition: Tuple.h:295
Self & operator-=(const Self &t)
Definition: Tuple.h:304
const T *const Const_pointer
Definition: Tuple.h:50
const T *& Value_opposite
Definition: Tuple.h:115
Reference operator[](int i)
Definition: Tuple.h:384
std::ostream & print(std::ostream &os, const char *s) const
Definition: Tuple.h:171
Self & operator/=(Const_reference t)
Definition: Tuple.h:206
const T *& Reference
Definition: Tuple.h:131
const T & Const_reference
Definition: Tuple.h:93
Self operator/(Const_reference t) const
Definition: Tuple.h:203
Self & operator+=(const Self &t)
Definition: Tuple.h:191
const T & Init_reference
Definition: Tuple.h:52
static Reference ref(Pointer_equivalent p)
Definition: Tuple.h:69
Const_reference operator[](int i) const
Definition: Tuple.h:269
const T *& Const_reference
Definition: Tuple.h:120
bool operator==(const Self &x) const
Definition: Tuple.h:375
Traits::Value Value
Definition: Tuple.h:247
T & Reference
Definition: Tuple.h:38
Self divide(const Self &b) const
Definition: Tuple.h:213