cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vctDataFunctionsDynamicVector.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  Author(s): Anton Deguet
6  Created on: 2012-07-09
7 
8  (C) Copyright 2012-2014 Johns Hopkins University (JHU), All Rights
9  Reserved.
10 
11 --- begin cisst license - do not edit ---
12 
13 This software is provided "as is" under an open source license, with
14 no warranty. The complete license can be found in license.txt and
15 http://www.cisst.org/cisst/license.txt.
16 
17 --- end cisst license ---
18 
19 */
20 
21 #pragma once
22 
23 #ifndef _vctDataFunctionsDynamicVector_h
24 #define _vctDataFunctionsDynamicVector_h
25 
29 
30 #if CISST_HAS_JSON
32 #endif // CISST_HAS_JSON
33 
34 template <typename _elementType>
35 class cmnData<vctDynamicVector<_elementType> >
36 {
37 public:
38  enum {IS_SPECIALIZED = 1};
39 
41 
42  static void Copy(DataType & data, const DataType & source)
43  {
44  // potentially resizes the destination
45  data.ForceAssign(source);
46  }
47 
48  static std::string HumanReadable(const DataType & data)
49  {
50  return cmnDataVectorHumanReadable(data);
51  }
52 
53  static void SerializeBinary(const DataType & data,
54  std::ostream & outputStream)
55  throw (std::runtime_error)
56  {
57  const vct::size_type mySize = data.size();
58  cmnData<size_t>::SerializeBinary(mySize, outputStream);
59  cmnDataVectorSerializeBinary(data, outputStream);
60  }
61 
62  static void DeSerializeBinary(DataType & data,
63  std::istream & inputStream,
64  const cmnDataFormat & localFormat,
65  const cmnDataFormat & remoteFormat)
66  throw (std::runtime_error)
67  {
68  cmnDataVectorDeSerializeBinaryResize(data, inputStream, localFormat, remoteFormat);
69  }
70 
71  static void SerializeText(const DataType & data,
72  std::ostream & outputStream,
73  const char delimiter = ',')
74  throw (std::runtime_error)
75  {
76  const size_t size = data.size();
77  cmnData<size_t>::SerializeText(size, outputStream, delimiter);
78  if (size > 0) {
79  outputStream << delimiter;
80  cmnDataVectorSerializeText(data, outputStream, delimiter);
81  }
82  }
83 
84  static std::string SerializeDescription(const DataType & data,
85  const char delimiter = ',',
86  const std::string & userDescription = "v")
87  {
88  return cmnDataVectorSerializeDescription(data, delimiter, userDescription, true /* need to serialize size */);
89  }
90 
91  static void DeSerializeText(DataType & data,
92  std::istream & inputStream,
93  const char delimiter = ',')
94  throw (std::runtime_error)
95  {
96  cmnDataVectorDeSerializeTextResize(data, inputStream, delimiter);
97  }
98 
99  static bool ScalarNumberIsFixed(const DataType & CMN_UNUSED(data))
100  {
101  return false;
102  }
103 
104  static size_t ScalarNumber(const DataType & data)
105  {
106  return cmnDataVectorScalarNumber(data) + 1; /* treat vector size as a scalar */
107  }
108 
109  static std::string ScalarDescription(const DataType & data, const size_t & index, const std::string & userDescription = "v")
110  throw (std::out_of_range)
111  {
112  /* treat vector size as a scalar */
113  if (index == 0) {
114  return cmnData<size_t>::ScalarDescription(data.size(), 0, userDescription + ".size");
115  }
116  return cmnDataVectorScalarDescription(data, index - 1, userDescription);
117  }
118 
119  static double Scalar(const DataType & data, const size_t & index) throw (std::out_of_range)
120  {
121  /* treat vector size as a scalar */
122  if (index == 0) {
123  return static_cast<double>(data.size());
124  }
125  return cmnDataVectorScalar(data, index - 1);
126  }
127 };
128 
129 // ---------------------- older functions, to be deprecated
130 template <typename _elementType>
131 inline void cmnDeSerializeRaw(std::istream & inputStream,
133  throw (std::runtime_error)
134 {
135  vector.DeSerializeRaw(inputStream);
136 }
137 
138 template <typename _elementType>
139 inline void cmnDeSerializeRaw(std::istream & inputStream,
141  throw (std::runtime_error)
142 {
143  vector.DeSerializeRaw(inputStream);
144 }
145 
146 template <typename _elementType>
147 inline void cmnSerializeRaw(std::ostream & outputStream,
148  const vctDynamicVector<_elementType> & vector)
149  throw (std::runtime_error)
150 {
151  vector.SerializeRaw(outputStream);
152 }
153 
154 template <typename _elementType>
155 inline void cmnSerializeRaw(std::ostream & outputStream,
156  const vctDynamicVectorRef<_elementType> & vector)
157  throw (std::runtime_error)
158 {
159  vector.SerializeRaw(outputStream);
160 }
161 
162 template <typename _elementType>
163 inline void cmnSerializeRaw(std::ostream & outputStream,
165  throw (std::runtime_error)
166 {
167  vector.SerializeRaw(outputStream);
168 }
169 
170 #endif // _vctDataFunctionsDynamicVector_h
A vector object of dynamic size.
Definition: vctDynamicVector.h:127
static size_t ScalarNumber(const DataType &data)
Definition: vctDataFunctionsDynamicVector.h:104
vctDynamicVector< _elementType > DataType
Definition: vctDataFunctionsDynamicVector.h:40
static bool ScalarNumberIsFixed(const DataType &CMN_UNUSED(data))
Definition: vctDataFunctionsDynamicVector.h:99
Dynamic vector referencing existing memory (const)
Definition: vctDynamicConstVectorRef.h:79
Definition: cmnDataFormat.h:32
void cmnDataVectorSerializeText(const _vectorType &data, std::ostream &outputStream, const char delimiter)
Definition: cmnDataFunctionsVectorHelpers.h:63
#define CMN_UNUSED(argument)
Definition: cmnPortability.h:479
Dynamic vector referencing existing memory.
Definition: vctDynamicVectorRef.h:77
size_t cmnDataVectorScalarNumber(const _vectorType &data)
Definition: cmnDataFunctionsVectorHelpers.h:218
std::string cmnDataVectorSerializeDescription(const _vectorType &data, const char delimiter, const std::string &userDescription, const bool serializeSize)
Definition: cmnDataFunctionsVectorHelpers.h:132
size_t size_type
Definition: vctContainerTraits.h:35
std::string cmnDataVectorHumanReadable(const _vectorType &data)
Definition: cmnDataFunctionsVectorHelpers.h:47
static void Copy(DataType &data, const DataType &source)
Definition: vctDataFunctionsDynamicVector.h:42
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
std::string cmnDataVectorScalarDescription(const _vectorType &data, const size_t index, const std::string &userDescription)
Definition: cmnDataFunctionsVectorHelpers.h:278
void cmnSerializeRaw(std::ostream &outputStream, const vctDynamicVector< _elementType > &vector)
Definition: vctDataFunctionsDynamicVector.h:147
void cmnDataVectorSerializeBinary(const _vectorType &data, std::ostream &outputStream)
Definition: cmnDataFunctionsVectorHelpers.h:158
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter= ',')
Definition: vctDataFunctionsDynamicVector.h:91
ThisType & ForceAssign(const vctDynamicConstVectorBase< __vectorOwnerType, __elementType > &other)
Definition: vctDynamicVector.h:280
size_type size(void) const
Definition: vctDynamicConstVectorBase.h:164
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
void cmnDataVectorDeSerializeTextResize(_vectorType &data, std::istream &inputStream, const char delimiter)
Definition: cmnDataFunctionsVectorHelpers.h:97
static std::string SerializeDescription(const DataType &data, const char delimiter= ',', const std::string &userDescription="v")
Definition: vctDataFunctionsDynamicVector.h:84
static std::string ScalarDescription(const DataType &data, const size_t &index, const std::string &userDescription="v")
Definition: vctDataFunctionsDynamicVector.h:109
Definition: cmnDataFunctions.h:53
static double Scalar(const DataType &data, const size_t &index)
Definition: vctDataFunctionsDynamicVector.h:119
void cmnDataVectorDeSerializeBinaryResize(_vectorType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: cmnDataFunctionsVectorHelpers.h:187
static std::string ScalarDescription(const DataType &data, const size_t index, const std::string &userDescription="")
Definition: cmnDataFunctions.h:56
Declaration of vctDynamicVectorBase.
static std::string HumanReadable(const DataType &data)
Definition: vctDataFunctionsDynamicVector.h:48
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
Definition: vctDataFunctionsDynamicVector.h:71
void cmnDeSerializeRaw(std::istream &inputStream, vctDynamicVector< _elementType > &vector)
Definition: vctDataFunctionsDynamicVector.h:131
double cmnDataVectorScalar(const _vectorType &data, const size_t index)
Definition: cmnDataFunctionsVectorHelpers.h:296
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: vctDataFunctionsDynamicVector.h:62
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
Definition: vctDataFunctionsDynamicVector.h:53