MDA
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups
Matrix1Line.hpp
1 /*
2  * Matrix1Line.hpp
3  *
4  * Created on: 3 Oct 2013
5  * Author: ck
6  */
7 
8 #ifndef MATRIX1LINE_HPP_
9 #define MATRIX1LINE_HPP_
10 
11 
12 
13 // C header
14 #include <cstdlib>
15 
16 
17 // C++ header
18 #include <vector>
19 
20 namespace MDAT {
21 
25 template <typename DataType>
27 {
28 
29 
30 private:
31  size_t _dim1, _dim2;
32  std::vector<DataType> _matrix;
33 
34 public:
35  typedef DataType value_type;
36 
37 
38  Matrix1Line():_dim1(0), _dim2(0)
39  {}
40 
46  Matrix1Line(size_t dim1, size_t dim2);
47 
54  Matrix1Line(size_t dim1, size_t dim2, DataType init);
55 
59  virtual ~Matrix1Line()
60  {
61 
62  }
63 
69  DataType * operator[](unsigned int index)
70  {
71  return &(_matrix.data()[index*_dim2]);
72  }
73 
79  DataType *operator[](unsigned int index) const
80  {
81  return &(_matrix.data()[index*_dim2]);
82  }
83 
84  typename std::vector<DataType>::iterator begin(size_t id)
85  {
86  return _matrix.begin()+id*_dim2;
87  }
88 
89  typename std::vector<DataType>::iterator end(size_t id)
90  {
91  if (id == (_dim1-1))
92  return _matrix.end();
93  else
94  return _matrix.begin()+((id+1)*_dim2);
95  }
96 
102  void resize(size_t dim_1, size_t dim_2)
103  {
104  _dim1=dim_1;
105  _dim2=dim_2;
106  size_t dim= dim_1*dim_2;
107  for (size_t i=0; i<dim; ++i)
108  _matrix[i].resize(dim);
109  }
110 
115  size_t dim1() const
116  {
117  return _dim1;
118  }
119 
120  size_t size() const
121  {
122  return _matrix.size();
123  }
128  size_t dim2() const
129  {
130  return (_dim1 > 0) ? _dim2 : 0;
131  }
132 
133  void
134  fill(const DataType &value)
135  {
136  size_t dim = _dim1*_dim2;
137  for (size_t i=0; i<dim; ++i)
138  _matrix[i] = value;
139  }
140 };
141 
142 
143 template <typename DataType>
144 Matrix1Line<DataType>::Matrix1Line(size_t dim_1, size_t dim_2, DataType init):_dim1(dim_1), _dim2(dim_2)
145 {
146  _matrix.resize(dim_1*dim_2, init);
147 }
148 
149 
150 template <typename DataType>
151 Matrix1Line<DataType>::Matrix1Line(size_t dim_1, size_t dim_2):_dim1(dim_1), _dim2(dim_2)
152 {
153  _matrix.resize(dim_1*dim_2);
154 }
155 
156 }
157 
158 
159 #endif /* MATRIX1LINE_HPP_ */