cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cmnDataFunctionsString.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 _cmnDataFunctionsString_h
25 #define _cmnDataFunctionsString_h
26 
28 #include <string>
29 
30 // always include last
31 #include <cisstCommon/cmnExport.h>
32 
33 size_t CISST_EXPORT cmnDataSerializeBinary(const std::string & data, char * buffer, size_t bufferSize);
34 
35 size_t CISST_EXPORT cmnDataDeSerializeBinary(std::string & data, const char * buffer, size_t bufferSize,
36  const cmnDataFormat & localFormat,
37  const cmnDataFormat & remoteFormat);
38 
39 void CISST_EXPORT cmnDataSerializeBinary(const std::string & data,
40  std::ostream & outputStream) throw (std::runtime_error);
41 
42 void CISST_EXPORT cmnDataDeSerializeBinary(std::string & data,
43  std::istream & inputStream,
44  const cmnDataFormat & localFormat,
45  const cmnDataFormat & remoteFormat) throw (std::runtime_error);
46 
47 void CISST_EXPORT cmnDataSerializeText(const std::string & data,
48  std::ostream & outputStream,
49  const char delimiter = ',') throw (std::runtime_error);
50 
51 void CISST_EXPORT cmnDataDeSerializeText(std::string & data,
52  std::istream & inputStream,
53  const char delimiter = ',') throw (std::runtime_error);
54 
55 
56 template <>
57 class cmnData<std::string>
58 {
59 public:
60  typedef std::string DataType;
61 
62  CMN_DATA_IS_SPECIALIZED_TRUE(std::string)
63  CMN_DATA_COPY_USING_ASSIGN(std::string);
64  CMN_DATA_SERIALIZE_DESCRIPTION(std::string, str);
65 
66  static std::string HumanReadable(const std::string & data) {
67  return data;
68  }
69 
70  static size_t SerializeBinaryByteSize(const DataType & data) {
71  return (cmnData<size_t>::SerializeBinaryByteSize(data.size()) + data.size() * sizeof(std::string::value_type));
72  }
73 
74  static size_t SerializeBinary(const DataType & data,
75  char * buffer, size_t bufferSize) {
76  return cmnDataSerializeBinary(data, buffer, bufferSize);
77  }
78 
79  static size_t DeSerializeBinary(DataType & data, const char * buffer, size_t bufferSize,
80  const cmnDataFormat & localFormat,
81  const cmnDataFormat & remoteFormat)
82  {
83  return cmnDataDeSerializeBinary(data, buffer, bufferSize, localFormat, remoteFormat);
84  }
85 
86  static void SerializeBinary(const DataType & data,
87  std::ostream & outputStream)
88  throw (std::runtime_error)
89  {
90  cmnDataSerializeBinary(data, outputStream);
91  }
92 
93  static void DeSerializeBinary(DataType & data,
94  std::istream & inputStream,
95  const cmnDataFormat & localFormat,
96  const cmnDataFormat & remoteFormat)
97  throw (std::runtime_error)
98  {
99  cmnDataDeSerializeBinary(data, inputStream, localFormat, remoteFormat);
100  }
101 
102  static void SerializeText(const DataType & data,
103  std::ostream & outputStream,
104  const char delimiter = ',')
105  throw (std::runtime_error)
106  {
107  cmnDataSerializeText(data, outputStream, delimiter);
108  }
109 
110  static void DeSerializeText(DataType & data,
111  std::istream & inputStream,
112  const char delimiter = ',')
113  throw (std::runtime_error)
114  {
115  cmnDataDeSerializeText(data, inputStream, delimiter);
116  }
117 
118  static bool ScalarNumberIsFixed(const std::string & CMN_UNUSED(data)) {
119  return true;
120  }
121 
122  static size_t ScalarNumber(const std::string & CMN_UNUSED(data)) {
123  return 0;
124  }
125 
126  static std::string ScalarDescription(const std::string & CMN_UNUSED(data), const size_t CMN_UNUSED(index),
127  const std::string & CMN_UNUSED(userDescription)) throw (std::out_of_range) {
128  cmnThrow(std::out_of_range("cmnDataScalarDescription: std::string has no scalar"));
129  return "n/a";
130  }
131 
132  static double Scalar(const std::string & CMN_UNUSED(data), const size_t CMN_UNUSED(index)) throw (std::out_of_range) {
133  cmnThrow(std::out_of_range("cmnDataScalar: std::string has no scalar"));
134  return 1.234;
135  }
136 };
137 
138 #endif // _cmnDataFunctionsString_h
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
static size_t SerializeBinary(const DataType &data, char *buffer, size_t bufferSize)
Definition: cmnDataFunctionsString.h:74
#define CMN_DATA_IS_SPECIALIZED_TRUE(_type)
Definition: cmnDataFunctionsMacros.h:228
Definition: cmnDataFormat.h:32
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: cmnDataFunctionsString.h:93
void CISST_EXPORT cmnDataDeSerializeText(std::string &data, std::istream &inputStream, const char delimiter= ',')
#define CMN_UNUSED(argument)
Definition: cmnPortability.h:479
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
Definition: cmnDataFunctionsString.h:86
static size_t DeSerializeBinary(DataType &data, const char *buffer, size_t bufferSize, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: cmnDataFunctionsString.h:79
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter= ',')
Definition: cmnDataFunctionsString.h:110
#define CMN_DATA_SERIALIZE_DESCRIPTION(_type, _description)
Definition: cmnDataFunctionsMacros.h:41
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
Definition: cmnDataFunctionsString.h:102
size_t CISST_EXPORT cmnDataSerializeBinary(const std::string &data, char *buffer, size_t bufferSize)
static std::string ScalarDescription(const std::string &CMN_UNUSED(data), const size_t CMN_UNUSED(index), const std::string &CMN_UNUSED(userDescription))
Definition: cmnDataFunctionsString.h:126
static size_t ScalarNumber(const std::string &CMN_UNUSED(data))
Definition: cmnDataFunctionsString.h:122
Macros to export the symbols of cisstCommon (in a Dll).
std::string DataType
Definition: cmnDataFunctionsString.h:60
Definition: cmnDataFunctions.h:53
void CISST_EXPORT cmnDataSerializeText(const std::string &data, std::ostream &outputStream, const char delimiter= ',')
#define cmnThrow(a)
Definition: MinimalCmn.h:4
size_t CISST_EXPORT cmnDataDeSerializeBinary(std::string &data, const char *buffer, size_t bufferSize, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
static double Scalar(const std::string &CMN_UNUSED(data), const size_t CMN_UNUSED(index))
Definition: cmnDataFunctionsString.h:132
#define CMN_DATA_COPY_USING_ASSIGN(_type)
Definition: cmnDataFunctionsMacros.h:33
static bool ScalarNumberIsFixed(const std::string &CMN_UNUSED(data))
Definition: cmnDataFunctionsString.h:118
static size_t SerializeBinaryByteSize(const DataType &data)
Definition: cmnDataFunctionsString.h:70