cisst-saw
Loading...
Searching...
No Matches
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 Author(s): Anton Deguet
6 Created on: 2011-06-27
7
8 (C) Copyright 2011-2018 Johns Hopkins University (JHU), All Rights Reserved.
9
10--- begin cisst license - do not edit ---
11
12This software is provided "as is" under an open source license, with
13no warranty. The complete license can be found in license.txt and
14http://www.cisst.org/cisst/license.txt.
15
16--- end cisst license ---
17*/
18
19
20#pragma once
21#ifndef _cmnDataFunctionsVector_h
22#define _cmnDataFunctionsVector_h
23
25#include <vector>
27
28// always include last
30
31template <class _elementType>
32class cmnData<std::vector<_elementType> >
33{
34public:
35 enum {IS_SPECIALIZED = 1};
36
37 typedef std::vector<_elementType> DataType;
38
39 static void Copy(DataType & data, const DataType & source)
40 {
41 cmnDataVectorCopy(data, source);
42 }
43
44 static std::string HumanReadable(const DataType & data)
45 {
46 return cmnDataVectorHumanReadable(data);
47 }
48
49 static void SerializeText(const DataType & data,
50 std::ostream & outputStream,
51 const char delimiter) CISST_THROW(std::runtime_error)
52 {
53 const size_t size = data.size();
54 cmnData<size_t>::SerializeText(size, outputStream, delimiter);
55 if (size > 0) {
56 outputStream << delimiter;
57 cmnDataVectorSerializeText(data, outputStream, delimiter);
58 }
59 }
60
61 static void DeSerializeText(DataType & data,
62 std::istream & inputStream,
63 const char delimiter) CISST_THROW(std::runtime_error)
64 {
65 cmnDataVectorDeSerializeTextResize(data, inputStream, delimiter);
66 }
67
68 static std::string SerializeDescription(const DataType & data,
69 const char delimiter,
70 const std::string & userDescription = "v")
71 {
72 return cmnDataVectorSerializeDescription(data, delimiter, userDescription, true /* need to serialize size */);
73 }
74
75 static void SerializeBinary(const DataType & data, std::ostream & outputStream)
76 CISST_THROW(std::runtime_error)
77 {
78 cmnData<size_t>::SerializeBinary(data.size(), outputStream);
79 cmnDataVectorSerializeBinary(data, outputStream);
80 }
81
82 static void DeSerializeBinary(DataType & data,
83 std::istream & inputStream,
84 const cmnDataFormat & localFormat,
85 const cmnDataFormat & remoteFormat)
86 CISST_THROW(std::runtime_error)
87 {
88 cmnDataVectorDeSerializeBinaryResize(data, inputStream, localFormat, remoteFormat);
89 }
90
91 static bool ScalarNumberIsFixed(const DataType & CMN_UNUSED(data))
92 {
93 return false;
94 }
95
96 static size_t ScalarNumber(const DataType & data)
97 {
98 return cmnDataVectorScalarNumber(data) + 1; /* treat vector size as a scalar */
99 }
100
101 static std::string ScalarDescription(const DataType & data, const size_t index,
102 const std::string & userDescription = "v")
103 CISST_THROW(std::out_of_range)
104 {
105 /* treat vector size as a scalar */
106 if (index == 0) {
107 return cmnData<size_t>::ScalarDescription(data.size(), 0, userDescription + ".size");
108 }
109 return cmnDataVectorScalarDescription(data, index - 1, userDescription);
110 }
111
112 static double Scalar(const DataType & data, const size_t index)
113 CISST_THROW(std::out_of_range)
114 {
115 /* treat vector size as a scalar */
116 if (index == 0) {
117 return static_cast<double>(data.size());
118 }
119 return cmnDataVectorScalar(data, index - 1);
120 }
121};
122
123#endif // _cmnDataFunctionsVector_h
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition cmnDataFunctionsVector.h:82
@ IS_SPECIALIZED
Definition cmnDataFunctionsVector.h:35
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter) CISST_THROW(std
Definition cmnDataFunctionsVector.h:49
static std::string ScalarDescription(const DataType &data, const size_t index, const std::string &userDescription="v") CISST_THROW(std
Definition cmnDataFunctionsVector.h:101
static std::string HumanReadable(const DataType &data)
Definition cmnDataFunctionsVector.h:44
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter) CISST_THROW(std
Definition cmnDataFunctionsVector.h:61
static double Scalar(const DataType &data, const size_t index) CISST_THROW(std
Definition cmnDataFunctionsVector.h:112
std::vector< _elementType > DataType
Definition cmnDataFunctionsVector.h:37
static size_t ScalarNumber(const DataType &data)
Definition cmnDataFunctionsVector.h:96
static void SerializeBinary(const DataType &data, std::ostream &outputStream) CISST_THROW(std
Definition cmnDataFunctionsVector.h:75
static std::string SerializeDescription(const DataType &data, const char delimiter, const std::string &userDescription="v")
Definition cmnDataFunctionsVector.h:68
static void Copy(DataType &data, const DataType &source)
Definition cmnDataFunctionsVector.h:39
static bool ScalarNumberIsFixed(const DataType &CMN_UNUSED(data))
Definition cmnDataFunctionsVector.h:91
Definition cmnDataFormat.h:30
Definition cmnDataFunctions.h:51
static size_t SerializeBinary(const DataType &data, char *buffer, size_t bufferSize)
void cmnDataVectorCopy(_vectorType &data, const _vectorType &source)
Definition cmnDataFunctionsVectorHelpers.h:25
void cmnDataVectorSerializeText(const _vectorType &data, std::ostream &outputStream, const char delimiter) CISST_THROW(std
Definition cmnDataFunctionsVectorHelpers.h:63
void cmnDataVectorSerializeBinary(const _vectorType &data, std::ostream &outputStream) CISST_THROW(std
Definition cmnDataFunctionsVectorHelpers.h:158
std::string cmnDataVectorSerializeDescription(const _vectorType &data, const char delimiter, const std::string &userDescription, const bool serializeSize)
Definition cmnDataFunctionsVectorHelpers.h:132
size_t cmnDataVectorScalarNumber(const _vectorType &data)
Definition cmnDataFunctionsVectorHelpers.h:218
void cmnDataVectorDeSerializeBinaryResize(_vectorType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition cmnDataFunctionsVectorHelpers.h:187
void cmnDataVectorDeSerializeTextResize(_vectorType &data, std::istream &inputStream, const char delimiter) CISST_THROW(std
Definition cmnDataFunctionsVectorHelpers.h:97
std::string cmnDataVectorScalarDescription(const _vectorType &data, const size_t index, const std::string &userDescription) CISST_THROW(std
Definition cmnDataFunctionsVectorHelpers.h:278
double cmnDataVectorScalar(const _vectorType &data, const size_t index) CISST_THROW(std
Definition cmnDataFunctionsVectorHelpers.h:296
std::string cmnDataVectorHumanReadable(const _vectorType &data)
Definition cmnDataFunctionsVectorHelpers.h:44
Macros to export the symbols of cisstCommon (in a Dll).
#define CMN_UNUSED(argument)
Definition cmnPortability.h:497
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
STL namespace.
size_type size(void) const
Definition vctDynamicConstMatrixBase.h:228