MyraMath
Pack.h
Go to the documentation of this file.
1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
6 #ifndef MYRAMATH_UTILITY_PACK_H
7 #define MYRAMATH_UTILITY_PACK_H
8 
14 #include <iostream>
15 
16 namespace myra {
17 
18 template<class T, int N> class Pack
19  {
20  public:
21 
23  Pack()
24  { }
25 
27  const T* begin() const
28  { return data; }
29  const T* end() const
30  { return data+N; }
31 
33  T* begin()
34  { return data; }
35  T* end()
36  { return data+N; }
37 
39  const T& operator[] (int n) const
40  { return data[n]; }
41  T& operator[] (int n)
42  { return data[n]; }
43 
44  private:
45 
46  // Internal contents.
47  T data[N];
48 
49  };
50 
52 template<class T, int N> std::ostream& operator<< (std::ostream& out, const Pack<T,N>& pack)
53  {
54  out << "[ ";
55  for (int n = 0; n < N; ++n)
56  out << pack[n] << " ";
57  out << "]";
58  return out;
59  }
60 
62 template<class T> Pack<T,1> pack(const T& a)
63  {
64  Pack<T,1> p;
65  p[0] = a;
66  return p;
67  }
68 
70 template<class T> Pack<T,2> pack(const T& a, const T& b)
71  {
72  Pack<T,2> p;
73  p[0] = a;
74  p[1] = b;
75  return p;
76  }
77 
79 template<class T> Pack<T,3> pack(const T& a, const T& b, const T& c)
80  {
81  Pack<T,3> p;
82  p[0] = a;
83  p[1] = b;
84  p[2] = c;
85  return p;
86  }
87 
89 template<class T> Pack<T,4> pack(const T& a, const T& b, const T& c, const T& d)
90  {
91  Pack<T,4> p;
92  p[0] = a;
93  p[1] = b;
94  p[2] = c;
95  p[3] = d;
96  return p;
97  }
98 
100 template<class T> Pack<T,5> pack(const T& a, const T& b, const T& c, const T& d, const T& e)
101  {
102  Pack<T,5> p;
103  p[0] = a;
104  p[1] = b;
105  p[2] = c;
106  p[3] = d;
107  p[4] = e;
108  return p;
109  }
110 
112 template<class T> Pack<T,6> pack(const T& a, const T& b, const T& c, const T& d, const T& e, const T& f)
113  {
114  Pack<T,6> p;
115  p[0] = a;
116  p[1] = b;
117  p[2] = c;
118  p[3] = d;
119  p[4] = e;
120  p[5] = f;
121  return p;
122  }
123 
124 } // namespace myra
125 
126 #endif
Pack< T, 1 > pack(const T &a)
Factory function to make a Pack<T,1>
Definition: Pack.h:62
Pack()
Uninitialized contents.
Definition: Pack.h:23
const T & operator[](int n) const
Array access operator.
Definition: Pack.h:39
Definition: syntax.dox:1
T * begin()
Mutable range over internal contents.
Definition: Pack.h:33
Definition: Pack.h:18
const T * begin() const
Immutable range over internal contents.
Definition: Pack.h:27