source: flair-dev/trunk/include/FlairCore/Matrix.h @ 76

Last change on this file since 76 was 76, checked in by Sanahuja Guillaume, 2 years ago

m

File size: 5.2 KB
Line 
1// %flair:license{
2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
4// %flair:license}
5/*!
6 * \file Matrix.h
7 * \brief Class defining a matrix
8 * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
9 * \date 2018/01/30
10 * \version 4.0
11 */
12
13#ifndef MATRIX_H
14#define MATRIX_H
15
16#include <io_data.h>
17#include <IODataElement.h>
18#include <cvmatrix_descriptor.h>
19
20class Matrix_impl;
21
22namespace flair {
23namespace core {
24
25/*! \class Matrix
26*
27* \brief Class defining a matrix
28*
29*
30*/
31class Matrix : public io_data {
32public:
33  class Type : public DataType {
34  public:
35    Type(size_t _nbRows, size_t _nbCols, ScalarType const &_elementDataType)
36        : nbRows(_nbRows), nbCols(_nbCols), elementDataType(_elementDataType) {}
37    size_t GetSize() const {
38      return nbRows * nbCols * elementDataType.GetSize();
39    }
40    std::string GetDescription() const { return "matrix"; }
41    size_t GetNbRows() const { return nbRows; }
42    size_t GetNbCols() const { return nbCols; }
43    ScalarType const &GetElementDataType() const { return elementDataType; }
44
45  private:
46    size_t nbRows, nbCols;
47    ScalarType const &elementDataType;
48  };
49
50  /*!
51  * \brief Constructor
52  *
53  * Construct an io_data representing a matrix. \n
54  * It uses a cvmatrix_descriptor to get size and elements' names. \n
55  * Names are used for graphs and logs. \n
56  * All values are initialized to 0.
57  *
58  * \param parent parent
59  * \param descriptor matrix description, it is safe to destroy it after calling this constructor
60  * \param type type of matrix elements
61  * \param name name
62  * \param n number of samples
63  */
64  Matrix(const Object *parent, const cvmatrix_descriptor *descriptor,
65           ScalarType const &elementDataType, std::string name = "",
66           uint32_t n = 1);
67
68  /*!
69  * \brief Constructor
70  *
71  * Construct an io_data representing a matrix. \n
72  * Elements are unamed. \n
73  * All values are initialized to 0.
74  *
75  * \param parent parent
76  * \param rows matrix rows
77  * \param cols matrix cols
78  * \param type type of matrix elements
79  * \param name name
80  * \param n number of samples
81  */
82  Matrix(const Object *parent, uint32_t rows, uint32_t cols,
83           ScalarType const &elementDataType, std::string name = "",
84           uint32_t n = 1);
85
86  /*!
87  * \brief Destructor
88  *
89  */
90  ~Matrix();
91
92  /*!
93  * \brief Element value
94  *
95  * Element is accessed by locking and unlocking the io_data Mutex.
96  *
97  * \param row element row
98  * \param col element col
99  *
100  * \return element value
101  */
102  float Value(uint32_t row, uint32_t col) const;
103
104  /*!
105  * \brief Element value
106  *
107  * Element is not accessed by locking and unlocking the io_data Mutex. \n
108  * Thus, this function should be called with Mutex locked. \n
109  * This function is usefull when multiple successive access are done to the
110  * elments of the matrix. It avoids unnecessary locking and unlocking.
111  *
112  * \param row element row
113  * \param col element col
114  *
115  * \return element value
116  */
117  float ValueNoMutex(uint32_t row, uint32_t col) const;
118
119  /*!
120  * \brief Set element value
121  *
122  * Element is accessed by locking and unlocking the io_data Mutex.
123  *
124  * \param row element row
125  * \param col element col
126  * \param value element value
127  */
128  void SetValue(uint32_t row, uint32_t col, float value);
129
130  /*!
131  * \brief Set element value
132  *
133  * Element is not accessed by locking and unlocking the io_data Mutex. \n
134  * Thus, this function should be called with Mutex locked. \n
135  * This function is usefull when multiple successive access are done to the
136  * elments of the matrix. It avoids unnecessary locking and unlocking.
137  *
138  * \param row element row
139  * \param col element col
140  * \param value element value
141  */
142  void SetValueNoMutex(uint32_t row, uint32_t col, float value);
143
144  /*!
145  * \brief Element name
146  *
147  * If Matrix was created without cvmatrix_descriptor, element name is empty.
148  *
149  * \param row element row
150  * \param col element col
151  *
152  * \return element name
153  */
154  std::string Name(uint32_t row, uint32_t col) const;
155
156  /*!
157  * \brief Element
158  *
159  * Get a pointer to a specific element. This pointer can be used for plotting.
160  *
161  * \param row element row
162  * \param col element col
163  *
164  * \return pointer to the element
165  */
166  IODataElement *Element(uint32_t row, uint32_t col) const;
167
168  /*!
169  * \brief Element
170  *
171  * Get a pointer to a specific element. This pointer can be used for plotting.
172  *\n
173  * This function can be used for a 1D matrix.
174  *
175  * \param index element index
176  *
177  * \return pointer to the element
178  */
179  IODataElement *Element(uint32_t index) const;
180
181  /*!
182  * \brief Number of rows
183  *
184  * \return rows
185  */
186  uint32_t Rows(void) const;
187
188  /*!
189  * \brief Number of colomns
190  *
191  * \return colomns
192  */
193  uint32_t Cols(void) const;
194
195  Type const &GetDataType() const { return dataType; };
196 
197  /*!
198  * \brief Raw read datas
199  *
200  * Reimplemented from io_data. \n
201  * See io_data::RawRead.
202  *
203  * \param dst destination buffer
204  */
205  void RawRead(char *dst) const;
206
207  /*!
208  * \brief Raw write datas
209  *
210  * Copy the source to the internal datas. Source must be of the corresponding size.
211  *
212  * \param src source buffer
213  */
214  void RawWrite(char *src);
215 
216private:
217  class Matrix_impl *pimpl_;
218  Type dataType;
219};
220
221} // end namespace core
222} // end namespace flair
223
224#endif // MATRIX_H
Note: See TracBrowser for help on using the repository browser.