cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
svlSampleMatrixCustom.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Balazs Vagvolgyi
7  Created on: 2010
8 
9  (C) Copyright 2006-2010 Johns Hopkins University (JHU), All Rights
10  Reserved.
11 
12 --- begin cisst license - do not edit ---
13 
14 This software is provided "as is" under an open source license, with
15 no warranty. The complete license can be found in license.txt and
16 http://www.cisst.org/cisst/license.txt.
17 
18 --- end cisst license ---
19 
20 */
21 
22 #ifndef _svlSampleMatrixCustom_h
23 #define _svlSampleMatrixCustom_h
24 
26 
27 // Always include last!
29 
30 
31 template <class _ValueType>
33 {
35 
36 public:
37 
39  // Constructors //
41 
44  OwnData(true),
45  InvalidElement(0)
46  {
47  Matrix = new vctDynamicMatrix<_ValueType>;
48  }
49 
50  svlSampleMatrixCustom(bool owndata) :
52  OwnData(owndata),
53  InvalidElement(0)
54  {
55  if (OwnData) Matrix = new vctDynamicMatrix<_ValueType>;
56  else Matrix = 0;
57  }
58 
60  svlSampleMatrix(other),
61  OwnData(true),
62  InvalidElement(0)
63  {
64  Matrix = new vctDynamicMatrix<_ValueType>;
65  CopyOf(other);
66  }
67 
68 
70  // Destructor //
72 
74  {
75  if (OwnData) delete Matrix;
76  }
77 
78 
80  // Operators //
82 
84  {
85  CopyOf(other);
86  return *this;
87  }
88 
89 
91  // Inherited from svlSample //
93 
95  {
97  }
98 
100  {
101  if (IsTypeInt8 <_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixInt8;
102  else if (IsTypeInt16 <_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixInt16;
103  else if (IsTypeInt32 <_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixInt32;
104  else if (IsTypeInt64 <_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixInt64;
105  else if (IsTypeUInt8 <_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixUInt8;
106  else if (IsTypeUInt16<_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixUInt16;
107  else if (IsTypeUInt32<_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixUInt32;
108  else if (IsTypeUInt64<_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixUInt64;
109  else if (IsTypeFloat <_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixFloat;
110  else if (IsTypeDouble<_ValueType>(static_cast<_ValueType>(0))) return svlTypeMatrixDouble;
111  return svlTypeInvalid;
112  }
113 
114  int SetSize(const svlSample* sample)
115  {
116  const svlSampleMatrix* samplematrix = dynamic_cast<const svlSampleMatrix*>(sample);
117  if (samplematrix) {
118  SetSize(samplematrix->GetCols(), samplematrix->GetRows());
119  return SVL_OK;
120  }
121  else {
122  const svlSampleImage* sampleimage = dynamic_cast<const svlSampleImage*>(sample);
123  if (sampleimage) {
124  SetSize(sampleimage->GetWidth(), sampleimage->GetHeight());
125  return SVL_OK;
126  }
127  }
128  return SVL_FAIL;
129  }
130 
131  int SetSize(const svlSample& sample)
132  {
133  const svlSampleMatrix* samplematrix = dynamic_cast<const svlSampleMatrix*>(&sample);
134  if (samplematrix) {
135  SetSize(samplematrix->GetCols(), samplematrix->GetRows());
136  return SVL_OK;
137  }
138  else {
139  const svlSampleImage* sampleimage = dynamic_cast<const svlSampleImage*>(&sample);
140  if (sampleimage) {
141  SetSize(sampleimage->GetWidth(), sampleimage->GetHeight());
142  return SVL_OK;
143  }
144  }
145  return SVL_FAIL;
146  }
147 
148  int CopyOf(const svlSample* sample)
149  {
150  if (!sample) return SVL_FAIL;
151  if (sample->GetType() != GetType() || SetSize(sample) != SVL_OK) return SVL_FAIL;
152 
153  memcpy(GetUCharPointer(), sample->GetUCharPointer(), GetDataSize());
154  SetTimestamp(sample->GetTimestamp());
155 
156  return SVL_OK;
157  }
158 
159  int CopyOf(const svlSample& sample)
160  {
161  if (sample.GetType() != GetType() || SetSize(sample) != SVL_OK) return SVL_FAIL;
162 
163  memcpy(GetUCharPointer(), sample.GetUCharPointer(), GetDataSize());
164  SetTimestamp(sample.GetTimestamp());
165 
166  return SVL_OK;
167  }
168 
169  bool IsInitialized() const
170  {
171  if (Matrix == 0 || Matrix->cols() < 1 || Matrix->rows() < 1) return false;
172  return true;
173  }
174 
175  unsigned char* GetUCharPointer()
176  {
177  return reinterpret_cast<unsigned char*>(GetPointer());
178  }
179 
180  const unsigned char* GetUCharPointer() const
181  {
182  return reinterpret_cast<const unsigned char*>(GetPointer());
183  }
184 
185  unsigned int GetDataSize() const
186  {
187  return (GetColStride() * GetCols() * GetRows());
188  }
189 
190  virtual void SerializeRaw(std::ostream & outputStream) const
191  {
192  mtsGenericObject::SerializeRaw(outputStream);
193 
194  if (IsInitialized()) {
195  cmnSerializeRaw(outputStream, GetType());
196  cmnSerializeRaw(outputStream, GetTimestamp());
197  cmnSerializeRaw(outputStream, *Matrix);
198  }
199  }
200 
201  virtual void DeSerializeRaw(std::istream & inputStream)
202  {
204 
205  int type = -1;
206  double timestamp;
207  cmnDeSerializeRaw(inputStream, type);
208  if (type != GetType()) {
209  CMN_LOG_CLASS_RUN_ERROR << "Deserialized sample type mismatch " << std::endl;
210  return;
211  }
212  cmnDeSerializeRaw(inputStream, timestamp);
213  SetTimestamp(timestamp);
214  cmnDeSerializeRaw(inputStream, *Matrix);
215  }
216 
217 
219  // Inherited from svlSampleMatrix //
221 
222  unsigned char* GetUCharPointer(const unsigned int col, const unsigned int row)
223  {
224  return reinterpret_cast<unsigned char*>(GetPointer(col, row));
225  }
226 
227  const unsigned char* GetUCharPointer(const unsigned int col, const unsigned int row) const
228  {
229  return reinterpret_cast<const unsigned char*>(GetPointer(col, row));
230  }
231 
232  void SetSize(const unsigned int cols, const unsigned int rows)
233  {
234  if (Matrix && (GetCols() != cols || GetRows() != rows)) Matrix->SetSize(rows, cols);
235  }
236 
237  void Resize(const unsigned int cols, const unsigned int rows)
238  {
239  if (Matrix && (GetCols() != cols || GetRows() != rows)) Matrix->resize(rows, cols);
240  }
241 
242  unsigned int GetCols() const
243  {
244  if (Matrix) return static_cast<unsigned int>(Matrix->cols());
245  return 0;
246  }
247 
248  unsigned int GetRows() const
249  {
250  if (Matrix) return static_cast<unsigned int>(Matrix->rows());
251  return 0;
252  }
253 
254  unsigned int GetColStride() const
255  {
256  if (Matrix) return sizeof(_ValueType);
257  return 0;
258  }
259 
260  unsigned int GetRowStride() const
261  {
262  if (Matrix) return static_cast<unsigned int>(Matrix->cols() * sizeof(_ValueType));
263  return 0;
264  }
265 
266 
268  // svlSampleMatrixCustom specific methods //
270 
272  {
273  if (!OwnData) {
274  Matrix = matrix;
275  return SVL_OK;
276  }
277  return SVL_FAIL;
278  }
279 
281  {
282  if (Matrix) return *Matrix;
283  return InvalidMatrix;
284  }
285 
287  {
288  if (Matrix) return *Matrix;
289  return InvalidMatrix;
290  }
291 
292  _ValueType* GetPointer()
293  {
294  if (Matrix) return Matrix->Pointer();
295  return 0;
296  }
297 
298  const _ValueType* GetPointer() const
299  {
300  if (Matrix) return Matrix->Pointer();
301  return 0;
302  }
303 
304  _ValueType* GetPointer(const unsigned int col, const unsigned int row)
305  {
306  if (Matrix) return Matrix->Pointer(row, col);
307  return 0;
308  }
309 
310  const _ValueType* GetPointer(const unsigned int col, const unsigned int row) const
311  {
312  if (Matrix) return Matrix->Pointer(row, col);
313  return 0;
314  }
315 
316  _ValueType& Element(const unsigned int col, const unsigned int row)
317  {
318  if (Matrix) return Matrix->Element(row, col);
319  return InvalidElement;
320  }
321 
322  const _ValueType& Element(const unsigned int col, const unsigned int row) const
323  {
324  if (Matrix) return Matrix->Element(row, col);
325  return InvalidElement;
326  }
327 
328  const std::string Str(const unsigned int width, const unsigned int precision, const int errorvalue) const
329  {
330  std::stringstream strstr;
331  Str(strstr, width, precision, errorvalue);
332  return strstr.str();
333  }
334 
335  const std::string Str(const unsigned int width, const unsigned int precision, const unsigned int errorvalue) const
336  {
337  std::stringstream strstr;
338  Str(strstr, width, precision, errorvalue);
339  return strstr.str();
340  }
341 
342  const std::string Str(const unsigned int width, const unsigned int precision, const double errorvalue) const
343  {
344  std::stringstream strstr;
345  Str(strstr, width, precision, errorvalue);
346  return strstr.str();
347  }
348 
349  template <class _TypeIn>
350  void Str(std::stringstream& strstr, const unsigned int width, const unsigned int precision, _TypeIn errorvalue) const
351  {
352  // Create error value string
353  vctDynamicVector<char> errorstr(width + 1, '.');
354  errorstr[width] = 0;
355 
356  _ValueType val, error = static_cast<_ValueType>(errorvalue);
357  const unsigned int cols = GetCols();
358  const unsigned int rows = GetRows();
359  unsigned int c, r;
360 
361  for (r = 0; r < rows; r ++) {
362  strstr << std::fixed << std::setprecision(precision);
363  for (c = 0; c < cols; c ++) {
364  if (c > 0) strstr << " ";
365  val = Element(c, r);
366  if (val != error) strstr << std::setw(width) << val;
367  else strstr << errorstr.Pointer();
368  }
369  strstr << std::endl;
370  }
371  }
372 
373 private:
374  bool OwnData;
376  vctDynamicMatrix<_ValueType> InvalidMatrix;
377  _ValueType InvalidElement;
378 };
379 
380 #endif // _svlSampleMatrixCustom_h
381 
unsigned int GetDataSize() const
Definition: svlSampleMatrixCustom.h:185
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
unsigned char * GetUCharPointer(const unsigned int col, const unsigned int row)
Definition: svlSampleMatrixCustom.h:222
Definition: svlDefinitions.h:222
Definition: svlSampleMatrix.h:34
const _ValueType * GetPointer(const unsigned int col, const unsigned int row) const
Definition: svlSampleMatrixCustom.h:310
virtual const std::string Str(const unsigned int width, const unsigned int precision, const int errorvalue) const =0
svlSampleMatrixCustom()
Definition: svlSampleMatrixCustom.h:42
virtual unsigned int GetHeight(const unsigned int videochannel=0) const =0
int SetMatrix(vctDynamicMatrix< _ValueType > *matrix)
Definition: svlSampleMatrixCustom.h:271
svlStreamType
Definition: svlDefinitions.h:193
void Resize(const unsigned int cols, const unsigned int rows)
Definition: svlSampleMatrixCustom.h:237
svlSample * GetNewInstance() const
Definition: svlSampleMatrixCustom.h:94
virtual void SerializeRaw(std::ostream &outputStream) const
Definition: svlSampleMatrixCustom.h:190
virtual svlStreamType GetType() const =0
const std::string Str(const unsigned int width, const unsigned int precision, const unsigned int errorvalue) const
Definition: svlSampleMatrixCustom.h:335
virtual bool IsInitialized() const =0
virtual void SerializeRaw(std::ostream &outputStream) const
virtual void DeSerializeRaw(std::istream &inputStream)
virtual svlStreamType GetType() const =0
int SetSize(const svlSample &sample)
Definition: svlSampleMatrixCustom.h:131
virtual unsigned char * GetUCharPointer()=0
virtual unsigned int GetColStride() const =0
const unsigned char * GetUCharPointer() const
Definition: svlSampleMatrixCustom.h:180
virtual int CopyOf(const svlSample *sample)=0
int CopyOf(const svlSample &sample)
Definition: svlSampleMatrixCustom.h:159
virtual unsigned char * GetUCharPointer()=0
Definition: svlDefinitions.h:225
const _ValueType & Element(const unsigned int col, const unsigned int row) const
Definition: svlSampleMatrixCustom.h:322
Definition: svlDefinitions.h:227
Definition: svlDefinitions.h:226
const std::string Str(const unsigned int width, const unsigned int precision, const double errorvalue) const
Definition: svlSampleMatrixCustom.h:342
Definition: svlDefinitions.h:221
_ValueType & Element(const unsigned int col, const unsigned int row)
Definition: svlSampleMatrixCustom.h:316
svlSample & operator=(const svlSample &other)
Definition: svlDefinitions.h:195
const _ValueType * GetPointer() const
Definition: svlSampleMatrixCustom.h:298
_ValueType * GetPointer()
Definition: svlSampleMatrixCustom.h:292
virtual int SetSize(const svlSample *sample)=0
Definition: svlSampleMatrixCustom.h:32
Definition: svlDefinitions.h:220
virtual unsigned int GetRows() const =0
void cmnDeSerializeRaw(std::istream &inputStream, _elementType &data)
Definition: cmnDeSerializer.h:82
unsigned int GetRows() const
Definition: svlSampleMatrixCustom.h:248
unsigned int GetCols() const
Definition: svlSampleMatrixCustom.h:242
bool IsInitialized() const
Definition: svlSampleMatrixCustom.h:169
void cmnSerializeRaw(std::ostream &outputStream, const _elementType &data)
Definition: cmnSerializer.h:78
unsigned char * GetUCharPointer()
Definition: svlSampleMatrixCustom.h:175
Definition: svlSampleImage.h:35
Macros to export the symbols of cisstStereoVision (in a Dll).
void Str(std::stringstream &strstr, const unsigned int width, const unsigned int precision, _TypeIn errorvalue) const
Definition: svlSampleMatrixCustom.h:350
int SetSize(const svlSample *sample)
Definition: svlSampleMatrixCustom.h:114
#define CMN_DECLARE_SERVICES(hasDynamicCreation, lod)
Definition: cmnClassRegisterMacros.h:116
Definition: svlDefinitions.h:228
const unsigned char * GetUCharPointer(const unsigned int col, const unsigned int row) const
Definition: svlSampleMatrixCustom.h:227
pointer Pointer(index_type index=0)
Definition: vctDynamicVectorBase.h:155
vctDynamicMatrix< _ValueType > & GetDynamicMatrixRef()
Definition: svlSampleMatrixCustom.h:280
svlSampleMatrixCustom(bool owndata)
Definition: svlSampleMatrixCustom.h:50
Definition: svlDefinitions.h:229
#define CMN_LOG_CLASS_RUN_ERROR
Definition: cmnLogger.h:117
virtual unsigned int GetDataSize() const =0
~svlSampleMatrixCustom()
Definition: svlSampleMatrixCustom.h:73
virtual void DeSerializeRaw(std::istream &inputStream)
Definition: svlSampleMatrixCustom.h:201
Definition: svlDefinitions.h:223
#define SVL_FAIL
Definition: svlDefinitions.h:124
Definition: svlDefinitions.h:224
const std::string Str(const unsigned int width, const unsigned int precision, const int errorvalue) const
Definition: svlSampleMatrixCustom.h:328
svlSampleMatrixCustom(const svlSampleMatrixCustom< _ValueType > &other)
Definition: svlSampleMatrixCustom.h:59
void SetTimestamp(double ts)
unsigned int GetColStride() const
Definition: svlSampleMatrixCustom.h:254
const int CMN_DYNAMIC_CREATION
Definition: cmnClassRegisterMacros.h:331
unsigned int GetRowStride() const
Definition: svlSampleMatrixCustom.h:260
const vctDynamicMatrix< _ValueType > & GetDynamicMatrixRef() const
Definition: svlSampleMatrixCustom.h:286
_ValueType * GetPointer(const unsigned int col, const unsigned int row)
Definition: svlSampleMatrixCustom.h:304
#define CMN_LOG_ALLOW_DEFAULT
Definition: cmnLogLoD.h:76
void SetSize(const unsigned int cols, const unsigned int rows)
Definition: svlSampleMatrixCustom.h:232
svlStreamType GetType() const
Definition: svlSampleMatrixCustom.h:99
#define SVL_OK
Definition: svlDefinitions.h:123
virtual unsigned int GetWidth(const unsigned int videochannel=0) const =0
Definition: svlSample.h:31
int CopyOf(const svlSample *sample)
Definition: svlSampleMatrixCustom.h:148
double GetTimestamp() const
virtual unsigned int GetCols() const =0