cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cmnDataFunctionsVector.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): Anton Deguet
7  Created on: 2011-06-27
8 
9  (C) Copyright 2011-2013 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 
23 #pragma once
24 #ifndef _cmnDataFunctionsVector_h
25 #define _cmnDataFunctionsVector_h
26 
28 #include <vector>
30 
31 // always include last
32 #include <cisstCommon/cmnExport.h>
33 
34 template <class _elementType>
35 class cmnData<std::vector<_elementType> >
36 {
37 public:
38  enum {IS_SPECIALIZED = 1};
39 
40  typedef std::vector<_elementType> DataType;
41 
42  static void Copy(DataType & data, const DataType & source)
43  {
44  cmnDataVectorCopy(data, source);
45  }
46 
47  static std::string HumanReadable(const DataType & data)
48  {
49  return cmnDataVectorHumanReadable(data);
50  }
51 
52  static void SerializeText(const DataType & data,
53  std::ostream & outputStream,
54  const char delimiter) throw (std::runtime_error)
55  {
56  const size_t size = data.size();
57  cmnData<size_t>::SerializeText(size, outputStream, delimiter);
58  if (size > 0) {
59  outputStream << delimiter;
60  cmnDataVectorSerializeText(data, outputStream, delimiter);
61  }
62  }
63 
64  static void DeSerializeText(DataType & data,
65  std::istream & inputStream,
66  const char delimiter) throw (std::runtime_error)
67  {
68  cmnDataVectorDeSerializeTextResize(data, inputStream, delimiter);
69  }
70 
71  static std::string SerializeDescription(const DataType & data,
72  const char delimiter,
73  const std::string & userDescription = "v")
74  {
75  return cmnDataVectorSerializeDescription(data, delimiter, userDescription, true /* need to serialize size */);
76  }
77 
78  static void SerializeBinary(const DataType & data, std::ostream & outputStream)
79  throw (std::runtime_error)
80  {
81  cmnData<size_t>::SerializeBinary(data.size(), outputStream);
82  cmnDataVectorSerializeBinary(data, outputStream);
83  }
84 
85  static void DeSerializeBinary(DataType & data,
86  std::istream & inputStream,
87  const cmnDataFormat & localFormat,
88  const cmnDataFormat & remoteFormat)
89  throw (std::runtime_error)
90  {
91  cmnDataVectorDeSerializeBinaryResize(data, inputStream, localFormat, remoteFormat);
92  }
93 
94  static bool ScalarNumberIsFixed(const DataType & CMN_UNUSED(data))
95  {
96  return false;
97  }
98 
99  static size_t ScalarNumber(const DataType & data)
100  {
101  return cmnDataVectorScalarNumber(data) + 1; /* treat vector size as a scalar */
102  }
103 
104  static std::string ScalarDescription(const DataType & data, const size_t index,
105  const std::string & userDescription = "v")
106  throw (std::out_of_range)
107  {
108  /* treat vector size as a scalar */
109  if (index == 0) {
110  return cmnData<size_t>::ScalarDescription(data.size(), 0, userDescription + ".size");
111  }
112  return cmnDataVectorScalarDescription(data, index - 1, userDescription);
113  }
114 
115  static double Scalar(const DataType & data, const size_t index)
116  throw (std::out_of_range)
117  {
118  /* treat vector size as a scalar */
119  if (index == 0) {
120  return static_cast<double>(data.size());
121  }
122  return cmnDataVectorScalar(data, index - 1);
123  }
124 };
125 
126 #endif // _cmnDataFunctionsVector_h
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter)
Definition: cmnDataFunctionsVector.h:52
static std::string ScalarDescription(const DataType &data, const size_t index, const std::string &userDescription="v")
Definition: cmnDataFunctionsVector.h:104
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
std::vector< _elementType > DataType
Definition: cmnDataFunctionsVector.h:40
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
std::string cmnDataVectorHumanReadable(const _vectorType &data)
Definition: cmnDataFunctionsVectorHelpers.h:47
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter)
Definition: cmnDataFunctionsVector.h:64
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
static size_t ScalarNumber(const DataType &data)
Definition: cmnDataFunctionsVector.h:99
void cmnDataVectorSerializeBinary(const _vectorType &data, std::ostream &outputStream)
Definition: cmnDataFunctionsVectorHelpers.h:158
static bool ScalarNumberIsFixed(const DataType &CMN_UNUSED(data))
Definition: cmnDataFunctionsVector.h:94
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
Macros to export the symbols of cisstCommon (in a Dll).
static std::string SerializeDescription(const DataType &data, const char delimiter, const std::string &userDescription="v")
Definition: cmnDataFunctionsVector.h:71
void cmnDataVectorDeSerializeTextResize(_vectorType &data, std::istream &inputStream, const char delimiter)
Definition: cmnDataFunctionsVectorHelpers.h:97
static std::string HumanReadable(const DataType &data)
Definition: cmnDataFunctionsVector.h:47
Definition: cmnDataFunctions.h:53
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
static double Scalar(const DataType &data, const size_t index)
Definition: cmnDataFunctionsVector.h:115
static void Copy(DataType &data, const DataType &source)
Definition: cmnDataFunctionsVector.h:42
double cmnDataVectorScalar(const _vectorType &data, const size_t index)
Definition: cmnDataFunctionsVectorHelpers.h:296
void cmnDataVectorCopy(_vectorType &data, const _vectorType &source)
Definition: cmnDataFunctionsVectorHelpers.h:28
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
Definition: cmnDataFunctionsVector.h:78
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: cmnDataFunctionsVector.h:85