21#ifndef _cmnDataFunctionsJSON_h
22#define _cmnDataFunctionsJSON_h
39template <
typename _elementType>
43 typedef _elementType DataType;
44 static void SerializeText(
const DataType & data, Json::Value & jsonValue);
45 static void DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
49void CISST_EXPORT cmnDataJSON<double>::SerializeText(
const DataType & data, Json::Value & jsonValue);
51void CISST_EXPORT cmnDataJSON<double>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
54void CISST_EXPORT cmnDataJSON<float>::SerializeText(
const DataType & data, Json::Value & jsonValue);
56void CISST_EXPORT cmnDataJSON<float>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
59void CISST_EXPORT cmnDataJSON<char>::SerializeText(
const DataType & data, Json::Value & jsonValue);
61void CISST_EXPORT cmnDataJSON<char>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
64void CISST_EXPORT cmnDataJSON<int>::SerializeText(
const DataType & data, Json::Value & jsonValue);
66void CISST_EXPORT cmnDataJSON<int>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
69void CISST_EXPORT cmnDataJSON<unsigned int>::SerializeText(
const DataType & data, Json::Value & jsonValue);
71void CISST_EXPORT cmnDataJSON<unsigned int>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
74void CISST_EXPORT cmnDataJSON<long int>::SerializeText(
const DataType & data, Json::Value & jsonValue);
76void CISST_EXPORT cmnDataJSON<long int>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
79void CISST_EXPORT cmnDataJSON<unsigned long int>::SerializeText(
const DataType & data, Json::Value & jsonValue);
81void CISST_EXPORT cmnDataJSON<unsigned long int>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
84void CISST_EXPORT cmnDataJSON<unsigned long long int>::SerializeText(
const DataType & data, Json::Value & jsonValue);
86void CISST_EXPORT cmnDataJSON<unsigned long long int>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
89void CISST_EXPORT cmnDataJSON<bool>::SerializeText(
const DataType & data, Json::Value & jsonValue);
91void CISST_EXPORT cmnDataJSON<bool>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
94void CISST_EXPORT cmnDataJSON<std::string>::SerializeText(
const DataType & data, Json::Value & jsonValue);
96void CISST_EXPORT cmnDataJSON<std::string>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
102 static std::string
HumanReadable(Json::Value
const&) {
return ""; };
104 static void Copy(Json::Value & data,
const Json::Value & source) { data = source; };
106 static std::string
SerializeDescription(
const Json::Value &,
char,
const std::string &) {
return ""; };
108 static void SerializeText(
const Json::Value &, std::ostream&,
const char) {};
110 static void DeSerializeText(Json::Value &, std::istream &,
const char) {};
114 static void DeSerializeBinary(Json::Value &, std::istream &,
const cmnDataFormat &,
const cmnDataFormat &) {};
116 static std::string ScalarDescription(
const Json::Value &,
size_t,
const std::string &) {
return ""; };
118 static double Scalar(
const Json::Value &,
size_t) {
return 0.0; };
120 static size_t ScalarNumber(
const Json::Value &) {
return 0; };
126void CISST_EXPORT cmnDataJSON<Json::Value>::SerializeText(
const DataType & data, Json::Value & jsonValue);
128void CISST_EXPORT cmnDataJSON<Json::Value>::DeSerializeText(DataType & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error);
131template <
class _elementType>
132class cmnDataJSON<
std::vector<_elementType> >
135 typedef std::vector<_elementType> DataType;
137 static void SerializeText(
const DataType & data, Json::Value & jsonValue)
144 ++iter, ++jsonIndex) {
145 cmnDataJSON<_elementType>::SerializeText(*iter, jsonValue[jsonIndex]);
149 static void DeSerializeText(std::vector<_elementType> & data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error)
152 data.resize(jsonValue.size());
153 typedef typename DataType::iterator
iterator;
158 ++iter, ++jsonIndex) {
159 cmnDataJSON<_elementType>::DeSerializeText(*iter, jsonValue[jsonIndex]);
165template <
class _elementType,
int _size>
166class cmnDataJSON<_elementType[_size] >
169 typedef _elementType * pointer;
170 typedef const _elementType * const_pointer;
172 static void SerializeText(const_pointer data, Json::Value & jsonValue)
174 const_pointer ptr = data;
175 for (
int index = 0; index < _size; ++index, ++ptr) {
176 cmnDataJSON<_elementType>::SerializeText(*ptr, jsonValue[index]);
180 static void DeSerializeText(pointer data,
const Json::Value & jsonValue)
CISST_THROW(std::runtime_error)
182 if (jsonValue.size() != _size) {
183 cmnThrow(
"cmnDataJSON<c-array>::DeSerializeText: vector sizes don't match");
186 for (
int index = 0; index < _size; ++index, ++ptr) {
187 cmnDataJSON<_elementType>::DeSerializeText(*ptr, jsonValue[index]);
193template <
typename _elementType>
194void cmnDataSerializeTextJSON(
const _elementType & data, Json::Value & jsonValue) {
195 cmnDataJSON<_elementType>::SerializeText(data, jsonValue);
198template <
typename _elementType>
199std::string cmnDataSerializeTextJSON(
const _elementType & data) {
200 Json::Value jsonValue;
201 cmnDataJSON<_elementType>::SerializeText(data, jsonValue);
202 Json::StreamWriterBuilder builder;
203 return Json::writeString(builder, jsonValue);
206template <
typename _elementType>
207void cmnDataDeSerializeTextJSON(_elementType & data,
const Json::Value & jsonValue) {
208 cmnDataJSON<_elementType>::DeSerializeText(data, jsonValue);
Definition cmnDataFunctions.h:51
static void Copy(DataType &data, const DataType &source)
static size_t DeSerializeBinary(DataType &data, const char *buffer, size_t bufferSize, const cmnDataFormat &CMN_UNUSED(localFormat), const cmnDataFormat &CMN_UNUSED(remoteFormat))
static std::string SerializeDescription(const DataType &data, const char delimiter, const std::string &userDescription="")
static std::string HumanReadable(const DataType &data)
static bool ScalarNumberIsFixed(const DataType &data)
static size_t SerializeBinary(const DataType &data, char *buffer, size_t bufferSize)
static std::string static ScalarDescription(const DataType &data, const size_t index, const std::string &userDescription="") CISST_THROW(std double static Scalar(const DataType &data, const size_t index) CISST_THROW(std size_t ScalarNumber(const DataType &data)
Definition cmnDataFunctions.h:162
Macros to export the symbols of cisstCommon (in a Dll).
#define CISST_EXPORT
Definition cmnExportMacros.h:50
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
Declaration of the template function cmnThrow.
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
const_iterator end(void) const
Definition vctDynamicConstMatrixBase.h:209
OwnerType::const_iterator const_iterator
Definition vctDynamicConstMatrixBase.h:95
OwnerType::iterator iterator
Definition vctDynamicConstMatrixBase.h:92