cisst-saw
Loading...
Searching...
No Matches
cmnSerializer.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, Min Yang Jung
6 Created on: 2007-04-08
7
8 (C) Copyright 2007-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
24#pragma once
25
26#ifndef _cmnSerializer_h
27#define _cmnSerializer_h
28
34
35#include <string>
36#include <vector>
37#include <fstream>
38#include <cstddef>
39
41
42
43// Implementation class to provide serialization when _elementType is not derived from cmnGenericObject
44template <class _elementType, bool>
46{
47public:
48 static void SerializeRaw(std::ostream & outputStream, const _elementType & data) CISST_THROW(std::runtime_error)
49 {
50 outputStream.write(reinterpret_cast<const char *>(&data), sizeof(_elementType));
51 if (outputStream.fail()) {
52 cmnThrow("cmnSerializeRaw(_elementType): Error occured with std::ostream::write");
53 }
54 }
55};
56
57// Implementation class to provide serialization when _elementType is derived from cmnGenericObject
58template <class _elementType>
59class cmnSerializeRawImpl<_elementType, true>
60{
61public:
62 static void SerializeRaw(std::ostream & outputStream, const _elementType & data) CISST_THROW(std::runtime_error)
63 {
64 data.SerializeRaw(outputStream);
65 }
66};
67
74
75template <class _elementType>
76inline void cmnSerializeRaw(std::ostream & outputStream, const _elementType & data)
77 CISST_THROW(std::runtime_error)
78{
80 impl::SerializeRaw(outputStream, data);
81}
82
83
91inline void cmnSerializeSizeRaw(std::ostream & outputStream, const size_t & data)
92 CISST_THROW(std::runtime_error)
93{
94 unsigned long long int dataToSend = data;
95 cmnSerializeRaw(outputStream, dataToSend);
96}
97
98
104inline void cmnSerializeRaw(std::ostream & outputStream, const std::string & data)
105 CISST_THROW(std::runtime_error)
106{
107 const std::string::size_type size = data.size();
108 cmnSerializeSizeRaw(outputStream, size);
109 outputStream.write(data.c_str(), size * sizeof(std::string::value_type));
110 if (outputStream.fail()) {
111 cmnThrow("cmnSerializeRaw(std::string): Error occured with std::ostream::write");
112 }
113}
114
115
122template <class _elementType>
123inline void cmnSerializeRaw(std::ostream & outputStream, const std::vector<_elementType> & data)
124 CISST_THROW(std::runtime_error)
125{
126 const typename std::vector<_elementType>::size_type size = data.size();
127 cmnSerializeSizeRaw(outputStream, size);
128 for (size_t i = 0; i < size; i++) {
129 cmnSerializeRaw(outputStream, data[i]);
130 if (outputStream.fail()) {
131 cmnThrow("cmnSerializeRaw(std::vector<_elementType>): Error occured with std::ostream::write");
132 }
133 }
134}
135
136
163 CMN_DECLARE_SERVICES(CMN_NO_DYNAMIC_CREATION, CMN_LOG_ALLOW_DEFAULT);
164
165public:
166
170 typedef unsigned long long int TypeId;
171
178 cmnSerializer(std::ostream & outputStream);
179
182
184 bool ServicesSerialized(const cmnClassServicesBase *servicesPointer) const;
185
187 void Reset(void);
188
207 void Serialize(const cmnGenericObject & object, const bool serializeObject = true);
208
209
233 void SerializeServices(const cmnClassServicesBase * servicesPointer);
234
235
236 private:
237
238 std::ostream & OutputStream;
239
241 typedef std::list<const cmnClassServicesBase *> ServicesContainerType;
242 typedef ServicesContainerType::const_iterator const_iterator;
243 typedef ServicesContainerType::iterator iterator;
244
245 ServicesContainerType ServicesContainer;
246};
247
248
249// Add services instantiation
251
252
253#endif // _cmnSerialize_h
Base class for class services.
Definition cmnClassServicesBase.h:46
Base class for high level objects.
Definition cmnGenericObject.h:53
static void SerializeRaw(std::ostream &outputStream, const _elementType &data) CISST_THROW(std
Definition cmnSerializer.h:62
Definition cmnSerializer.h:46
static void SerializeRaw(std::ostream &outputStream, const _elementType &data) CISST_THROW(std
Definition cmnSerializer.h:48
Serialization utility class.
Definition cmnSerializer.h:162
void Reset(void)
void Serialize(const cmnGenericObject &object, const bool serializeObject=true)
unsigned long long int TypeId
Definition cmnSerializer.h:170
void SerializeServices(const cmnClassServicesBase *servicesPointer)
cmnSerializer(std::ostream &outputStream)
bool ServicesSerialized(const cmnClassServicesBase *servicesPointer) const
Class register definitions and log macros.
#define CMN_DECLARE_SERVICES_INSTANTIATION(className)
Definition cmnClassRegisterMacros.h:199
const int CMN_NO_DYNAMIC_CREATION
Definition cmnClassRegisterMacros.h:325
Macros to export the symbols of cisstCommon (in a Dll).
#define CISST_EXPORT
Definition cmnExportMacros.h:50
Defines cmnGenericObject.
#define CMN_LOG_ALLOW_DEFAULT
Definition cmnLogLoD.h:76
Portability across compilers and operating systems tools.
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
void cmnSerializeRaw(std::ostream &outputStream, const _elementType &data) CISST_THROW(std
Definition cmnSerializer.h:76
void cmnSerializeSizeRaw(std::ostream &outputStream, const size_t &data) CISST_THROW(std
Definition cmnSerializer.h:91
Declaration of the template function cmnThrow.
Declaration of the class cmnTypeTraits.
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
size_type size(void) const
Definition vctDynamicConstMatrixBase.h:228