* PseudoAxis is no more a friend of PseudoAxisAdapter.
[diffractometer.git] / src / Matrix.h
blob6cd280124108f6d86d6a04154af62bbe60f6babc
1 #ifndef _MATRIX_H_
2 #define _MATRIX_H_
4 template<class T>
5 struct Matrix
7 Matrix(void)
9 this->xdim = 0;
10 this->ydim = 0;
11 this->data = NULL;
12 this->_own_data = true;
15 Matrix(size_t xdim, size_t ydim)
17 this->xdim = xdim;
18 this->ydim = ydim;
19 this->data = new T[xdim * ydim];
20 this->_own_data = true;
23 virtual ~Matrix(void)
25 if(_own_data){
26 this->xdim = 0;
27 this->ydim = 0;
28 if(this->data){
29 delete[] this->data;
30 this->data = NULL;
35 void resize(size_t xdim, size_t ydim)
37 if(this->_own_data){
38 if(xdim != this->xdim
39 || ydim != this->ydim){
40 if(this->data)
41 delete[] this->data;
42 this->data = new T[xdim * ydim];
43 this->xdim = xdim;
44 this->ydim = ydim;
49 void clear(void)
51 if(this->xdim && this->ydim && this->data)
52 ::memset(this->data, 0, sizeof(T) * this->xdim * this->ydim);
55 void attach_to_buffer(T *data, size_t xdim, size_t ydim)
57 if(_own_data && this->data)
58 delete[] this->data;
59 this->xdim = xdim;
60 this->ydim = ydim;
61 this->data = data;
62 this->_own_data = false;
65 void set_data_from_buffer(T const *data, size_t xdim, size_t ydim)
67 ::memcpy(this->data, data, xdim * ydim * sizeof(T));
70 public:
72 size_t xdim;
73 size_t ydim;
74 T *data;
76 private:
78 bool _own_data;
80 #endif