MDA
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups
MatrixStack.hpp
Go to the documentation of this file.
1 /*
2  * MatrixStack.hpp
3  *
4  * Created on: Sep 11, 2013
5  * Author: ckeme_01
6  */
7 
13 #ifndef MATRIXSTACK_HPP_
14 #define MATRIXSTACK_HPP_
15 
16 
17 
18 // C header
19 #include <cstdlib>
20 
21 // C++ header
22 #include <vector>
23 
24 // MDAT
25 #include "Matrix.hpp"
26 
27 namespace MDAT {
28 
34 template <int n, typename DataType>
36 {
37 
38 private:
39  std::vector<Matrix<DataType> > _stack;
40 
41 public:
42 
46  MatrixStack():_stack(n,Matrix<DataType>(1,1))
47  {}
48 
54  MatrixStack(size_t dim1, size_t dim2):_stack(n,Matrix<DataType>(dim1,dim2))
55  {}
56 
61  MatrixStack(const MatrixStack&) = default;
62 
67  MatrixStack(MatrixStack&&) = default;
68 
74  MatrixStack & operator=(const MatrixStack&) = default;
75 
81  MatrixStack & operator=(MatrixStack&&) = default;
82 
83 
84  virtual ~MatrixStack()
85  {}
86 
87 
93  Matrix<DataType> &operator[](unsigned int index)
94  {
95  return _stack[index];
96  }
97 
103  const Matrix<DataType> &operator[](unsigned int index) const
104  {
105  return _stack[index];
106  }
107 
108 
113  size_t
115  {
116  return _stack[0].dim1();
117  }
118 
123  size_t
125  {
126  return _stack[0].dim2();
127  }
128 
129 
135  void
136  resize(size_t new_size1, size_t new_size2)
137  {
138  for (size_t i=0; i<n; ++i)
139  _stack[i].resize(new_size1, new_size2);
140  }
141 
147  void
148  ensure(size_t new_size1, size_t new_size2)
149  {
150  for (size_t i=0; i<n; ++i)
151  _stack[i].ensure(new_size1, new_size2);
152  }
153 
158  void
159  fill(const DataType &value)
160  {
161  for (size_t i=0; i<n; ++i)
162  _stack[i].fill(value);
163  }
164 };
165 
166 }
167 
168 #endif /* MATRIXSTACK_HPP_ */