47 #ifndef _MIRA_BINARYSERIALIZER_H_ 48 #define _MIRA_BINARYSERIALIZER_H_ 70 #define BINARY_VERSION_MARKER 65432u 73 #define CHECK_FORCE_SERIALIZE_BINARY_VERSION 101 template <
typename BinaryStream>
116 void reassign(
typename BinaryStream::streambuffer_pointer buffer) { mStream = buffer; }
120 BinaryStream&
stream() {
return mStream; }
123 BinaryStream mStream;
127 template <
typename BinaryStream,
bool Buffered>
153 template <
typename BinaryStream>
164 :
Base(buffer), mBufferStream(&mBuffer) {}
184 mBufferStream.seekp(0);
256 template <
typename Derived>
266 template <
typename T>
273 return this->
template version<void>(
version);
276 template <
typename T>
283 template <
typename T>
284 void write(
const T* data, std::size_t count) {
285 this->
This()->write(data,count);
294 template <
typename T>
296 return this->
This()->template hasCodec<T>();
306 template <
typename T>
309 return this->
This()->template
codec(obj);
315 template <
typename BinaryStream, u
int8 BinaryFormatVersion,
bool Buffered>
330 template <
typename BinaryStream, u
int8 BinaryFormatVersion,
bool Buffered,
typename StreamType>
335 template <
typename Serializer,
typename StreamType>
351 StreamType& stream) {
return NULL; }
354 template <
typename T>
356 serializer.
atomic(version);
363 template <
typename BinaryStream,
bool Buffered,
typename StreamType>
372 template <
typename T>
379 template <
typename BinaryStream,
bool Buffered,
typename StreamType>
388 template <
typename T>
392 stream << getSerializerFormatVersion();
397 template <
typename BinaryStream,
bool Buffered,
typename StreamType>
416 typedef std::tuple<typename StreamType::pos_type, bool, const char*>
ReflectState;
423 template <
typename T>
426 #ifdef CHECK_FORCE_SERIALIZE_BINARY_VERSION 429 MIRA_LOG(
NOTICE) <<
"BinarySerializer: Forced serializing as binary " 430 <<
"format version " << v <<
".";
435 typename Serializer::SimpleStreamType::buffer_type buffer;
438 stream.write(buffer.data(), buffer.size());
443 typename Serializer::SimpleStreamType::buffer_type buffer;
446 stream.write(buffer.data(), buffer.size());
450 if (v != getSerializerFormatVersion()) {
451 MIRA_THROW(XIO,
"BinarySerializer: Unhandled binary format, expected version " 452 << (
int)this->getSerializerFormatVersion() <<
", requested " << (
int)v <<
".");
460 stream << getSerializerFormatVersion();
472 ReflectState prevState = std::make_tuple(mVersionPos, mVersionSet, mContext);
474 mVersionPos = stream.tellp();
475 if (mVersionPos ==
typename StreamType::pos_type(-1))
476 MIRA_THROW(XIO,
"Failed querying stream position. The stream type does not seem to support repositioning. " 477 "Please use a buffered serializer (BufferedBinaryStreamSerializer).");
490 template <
typename T>
494 MIRA_THROW(XIO,
"BinarySerializer: version() called repeatedly by serialization of type '" 495 << typeName<T>() <<
"'. Context = '" << (mContext ? mContext :
"") <<
"'.");
497 std::size_t pos = stream.tellp();
498 stream.seekp(mVersionPos);
499 serializer.
atomic(version);
509 mVersionPos = std::get<0>(prev);
510 mVersionSet = std::get<1>(prev);
511 mContext = std::get<2>(prev);
515 typename StreamType::pos_type mVersionPos;
517 const char* mContext;
522 template <
typename BinaryStream, u
int8 BinaryFormatVersion,
bool Buffered = false>
523 class ConcreteBinarySerializer :
public BinarySerializer<ConcreteBinarySerializer<BinaryStream,
526 public BinarySerializerMixin,
527 public StreamAccessMixin<BinaryStream, Buffered>,
528 public SerializerFormatMixin<BinaryStream, BinaryFormatVersion, Buffered,
529 typename StreamAccessMixin<BinaryStream, Buffered>::StreamType>
531 typedef BinarySerializer<ConcreteBinarySerializer<BinaryStream, BinaryFormatVersion, Buffered> > Base;
532 typedef StreamAccessMixin<BinaryStream, Buffered> StreamAccess;
533 typedef SerializerFormatMixin<BinaryStream, BinaryFormatVersion, Buffered,
589 template <
typename T>
590 void serialize(
const T& value,
bool enableTypeCheck =
true)
592 #ifdef CHECK_FORCE_SERIALIZE_BINARY_VERSION 593 if (!Format::writeFormatVersion(value, enableTypeCheck, this->
stream()))
596 Format::writeFormatVersion(value, enableTypeCheck, this->
stream());
599 if(enableTypeCheck) {
600 std::string fulltypename = typeName<T>();
608 template <
typename T>
610 version = this->
template queryDesiredClassVersion<T>(
version,
false);
611 this->
template writeVersion<T>(
version, *
this, this->
stream());
617 return this->
template version<void>(
version);
622 template <
typename T>
624 version = this->
template queryDesiredClassVersion<T>(
version,
true);
625 this->
template writeVersion<T>(
version, *
this, this->
stream());
640 typename Format::ReflectState
preReflect(
const char* context =
"")
643 return Format::insertVersionPlaceholder(context, *
this, this->
stream());
648 Format::restoreVersionPtr(prev);
664 this->
stream() << referencedObjectID;
702 static const std::string context =
"invokeOverwrite " + typeName<T>();
703 typename Format::ReflectState prevState =
preReflect(context.c_str());
718 static const std::string context =
"invokeOverwrite PlainArray<" + typeName<T>() +
">";
719 typename Format::ReflectState prevState =
preReflect(context.c_str());
729 const char* buffer =
reinterpret_cast<const char*
>(array.data);
730 this->
stream().write(buffer, array.getSizeInBytes());
738 template <
typename T>
739 void write(
const T* data, std::size_t count) {
740 this->
stream().write(reinterpret_cast<const char*>(data),count*
sizeof(T));
761 auto p = mCodecs.insert(std::make_pair(
type,
codec));
763 MIRA_THROW(XLogical,
"A codec for the same type exists already");
772 auto it = mCodecs.find(
type);
773 if(it==mCodecs.end())
776 if(it->second!=
codec)
787 template <
typename T>
789 return mCodecs.count(typeId<T>())!=0;
799 template <
typename T>
805 auto it = mCodecs.find(typeId<T>());
806 if(it!=mCodecs.end()) {
809 s =
codec->getFourcc();
825 this->
stream() << encodedData;
840 std::map<TypeId, BinarySerializerCodecPtr> mCodecs;
850 extern template class ConcreteBinarySerializer<BinaryBufferOstream, 2>;
924 template <
typename Derived>
931 template <
typename T>
933 return this->This()->template version<T>(version);
938 return this->
template version<void>(version);
941 template <
typename T>
948 template <
typename T>
949 void read(T* data, std::size_t count) {
950 this->This()->read(data,count);
959 template <
typename T>
961 return this->This()->template hasCodec<T>();
970 template <
typename T>
973 return this->This()->template codec(obj);
979 template <
typename BinaryStream, u
int8 BinaryFormatVersion>
985 template <
typename BinaryStream, u
int8 BinaryVersionFormat>
990 template <
typename Deserializer,
typename BinaryStream>
1005 template <
typename T>
1019 template <
typename BinaryStream>
1028 template <
typename T>
1032 template <
typename BinaryStream>
1041 template <
typename T>
1048 MIRA_THROW(XIO,
"Failed to read binary format version number from binary stream: " 1049 "Reading from stream failed, e.g. empty or non-existent file.");
1052 MIRA_THROW(XIO,
"Failed to read binary format version number from binary stream: " 1053 "Expected marker not found, data invalid for binary format version 1.");
1058 if (v != getSerializerFormatVersion())
1059 MIRA_THROW(XIO,
"BinaryDeserializer: Unhandled binary format, expected version " 1060 << (
int)getSerializerFormatVersion() <<
", found " << (
int)v <<
".");
1066 template <
typename BinaryStream>
1077 typename BinaryStream::pos_type pos = stream.tellg();
1087 MIRA_THROW(XIO,
"Failed to read binary format version number from binary stream: " 1088 "Reading from stream failed, e.g. empty or non-existent file.");
1090 if (pos ==
typename BinaryStream::pos_type(-1))
1091 MIRA_THROW(XIO,
"Requiring fallback to legacy deserializer, but failing to query (and set) stream position. " 1092 "The stream type does not seem to support repositioning. " 1093 "You may try using a legacy deserializer directly, avoiding the need for setting the stream read position.");
1110 typedef std::tuple<serialization::VersionType, bool, const char*, bool>
ReflectState;
1115 mUncheckedVersion(0), mUncheckedContext(NULL) {}
1121 template <
typename T>
1125 #ifdef CHECK_FORCE_SERIALIZE_BINARY_VERSION 1128 MIRA_LOG(
NOTICE) <<
"BinaryDeserializer: Forced deserializing as binary " 1129 <<
"format version " << vf <<
".";
1132 getDataFormatVersion(stream);
1136 v = getDataFormatVersion(stream);
1139 if (v < getSerializerFormatVersion()) {
1142 MIRA_LOG(
NOTICE) <<
"BinaryDeserializer: Found outdated binary format, version " 1143 << (int)v <<
". Using legacy deserializer.";
1150 stream.seekg(v0.streamPosition());
1157 stream.seekg(v1.streamPosition());
1161 if (v != getSerializerFormatVersion()) {
1162 MIRA_THROW(XIO,
"BinaryDeserializer: Unhandled binary format, expected version " 1163 << (
int)getSerializerFormatVersion() <<
", found " << (
int)v <<
".");
1178 if ((mVersion > 0) && !mVersionChecked && (mUncheckedVersion == 0)) {
1179 mUncheckedVersion = mVersion;
1180 mUncheckedContext = mContext;
1181 prevState = std::make_tuple(mVersion, mVersionChecked, mContext,
true);
1183 prevState = std::make_tuple(mVersion, mVersionChecked, mContext,
false);
1184 deserializer.
atomic(mVersion);
1185 mVersionChecked =
false;
1193 template <
typename T>
1200 mVersionChecked =
true;
1209 if ((mVersion > 0) && !mVersionChecked)
1210 MIRA_THROW(XIO,
"Tried to deserialize versioned binary data (version " << (
int)mVersion <<
1211 ") into unversioned type. Context = '" << (mContext ? mContext :
"") <<
"'.");
1212 mVersion = std::get<0>(prev);
1213 mVersionChecked = std::get<1>(prev);
1214 mContext = std::get<2>(prev);
1215 if (std::get<3>(prev)) {
1216 mUncheckedVersion = 0;
1221 if (mUncheckedVersion > 0) {
1222 os <<
" While trying to deserialize versioned binary data (version " << (int)mUncheckedVersion <<
1223 ") into type that is unversioned or not checking version before critical read. " <<
1224 "Context = '" << (mUncheckedContext ? mUncheckedContext :
"") <<
"'.";
1225 }
else if ((mVersion > 0) && !mVersionChecked) {
1226 os <<
" While trying to deserialize versioned binary data (version " << (int)mVersion <<
1227 ") into type that is unversioned or not checking version before critical read. " <<
1228 "Context = '" << (mContext ? mContext :
"") <<
"'.";
1234 bool mVersionChecked;
1235 const char* mContext;
1238 const char* mUncheckedContext;
1243 template <
typename BinaryStream, u
int8 BinaryFormatVersion>
1244 class ConcreteBinaryDeserializer :
public BinaryDeserializer<ConcreteBinaryDeserializer<BinaryStream,
1245 BinaryFormatVersion> >,
1246 public BinarySerializerMixin,
1247 public DeserializerFormatMixin<BinaryStream, BinaryFormatVersion>
1249 typedef BinaryDeserializer<ConcreteBinaryDeserializer<BinaryStream, BinaryFormatVersion> > Base;
1250 typedef DeserializerFormatMixin<BinaryStream, BinaryFormatVersion> Format;
1259 typedef std::map<TypeId, BinarySerializerCodecPtr>
CodecsMap;
1279 : mStream(buffer) {}
1297 mStream(stream, pos) {}
1306 void reassign(
typename BinaryStream::streambuffer_pointer buffer) {
1328 template <
typename T>
1329 void deserialize(T& value,
bool enableTypeCheck =
true,
bool recursive =
false)
1331 if (!recursive && !Format::checkFormatVersion(value, enableTypeCheck, mStream))
1334 if(enableTypeCheck) {
1335 std::string fulltypename;
1340 MIRA_THROW(XBadCast,
"Failed reading type from binary data while " <<
1341 "deserializing into a variable of type '" << typeName<T>() <<
"'");
1344 if(fulltypename != typeName<T>())
1345 MIRA_THROW(XBadCast,
"Cannot deserialize the type '" << fulltypename <<
1346 "' into a variable of type '" << typeName<T>() <<
"'");
1354 template <
typename T>
1357 if (
version > expectedVersion)
1358 MIRA_THROW(XIO,
"Trying to deserialize binary data of a newer version (" << (
int)
version <<
1359 ") of type " << typeName<T>() <<
" into an older version (" << (
int)expectedVersion <<
").");
1365 return version<void>(expectedVersion);
1370 template <
typename T>
1372 return this->
template getVersion<T>(*this);
1375 template<
typename T>
1381 if(mStream.fail()) {
1382 std::stringstream ss;
1383 ss <<
"Failed to read member of type '" << typeName<T>()
1384 <<
"' from binary stream at stream position " <<
streamPosition() <<
".";
1386 Format::reportVersionChecked(ss);
1392 typename Format::ReflectState
preReflect(
const char* context =
"")
1394 return Format::readVersion(context, *
this);
1399 Format::restoreVersion(prev);
1420 template<
typename T>
1425 uint8 pointerType8U;
1426 mStream >> pointerType8U;
1441 pointer = this->
template resolveReference<T>(ref);
1453 mStream >> mClassType;
1465 template<
typename T>
1469 static const std::string context =
"invokeOverwrite " + typeName<T>();
1470 typename Format::ReflectState prevState =
preReflect(context.c_str());
1483 template<
typename T>
1487 static const std::string context =
"invokeOverwrite PlainArray<" + typeName<T>() +
">";
1488 typename Format::ReflectState prevState =
preReflect(context.c_str());
1499 char* buffer =
reinterpret_cast<char*
>(array.data);
1500 mStream.read(buffer, array.getSizeInBytes());
1509 template <
typename T>
1510 void read(T* data, std::size_t count) {
1511 mStream.read(reinterpret_cast<char*>(data),count*
sizeof(T));
1521 template <
typename T>
1533 template <
typename T>
1546 auto it = mCodecs.find(typeId<T>());
1547 if(it==mCodecs.end() || it->second->getFourcc()!=s) {
1549 codec = BinarySerializerCodec::createCodec<T>(s);
1551 mCodecs[typeId<T>()] =
codec;
1555 assert(
codec->getFourcc()==s);
1556 assert(
codec->getSupportedTypeId()==typeId<T>());
1560 mStream >> encodedData;
1563 codec->decode(encodedData, obj);
1581 BinaryStream mStream;
1582 std::string mClassType;
1592 extern template class ConcreteBinaryDeserializer<BinaryBufferIstream, 2>;
boost::mpl::bool_< false > useHumanReadableIDs
Definition: BinarySerializer.h:545
Format::ReflectState ReflectState
Definition: BinarySerializer.h:548
Base::AcceptDesiredVersion AcceptDesiredVersion
Definition: BinarySerializer.h:620
Definition: BinarySerializer.h:316
MIRA_DEPRECATED("Please call as version<MyType>(v) or version(v, this)", VersionType version(VersionType version))
Definition: BinarySerializer.h:271
Base::AcceptDesiredVersion AcceptDesiredVersion
Definition: BinarySerializer.h:1368
MIRA_DEPRECATED("Please call as version<MyType>(v) or version(v, this)", VersionType version(VersionType expectedVersion))
Definition: BinarySerializer.h:1363
ConcreteBinarySerializer(BinaryStream &stream)
Create a new binary serializer and assign it to the specified binary output stream.
Definition: BinarySerializer.h:573
bool codec(T &obj)
Decodes the specified object from the serialized data.
Definition: BinarySerializer.h:1534
void pointer(T *&pointer)
Overwrites Deserializer::pointer.
Definition: BinarySerializer.h:1421
void invokeOverwrite(serialization::PlainArray< T > &array)
Specialized for Array to implement an optimized variant for deserializing an array, if possible (i.e.
Definition: BinarySerializer.h:1484
Format::ReflectState ReflectState
Definition: BinarySerializer.h:1262
void invokeOverwrite(T &object)
The actual invoke implementation, that may also be overwritten in derived classes to add additional f...
Definition: AbstractReflector.h:271
Contains the Serializer template, a base class for all serializers.
void pointer(T *&pointer)
Definition: Deserializer.h:157
void deserialize(const std::string &name, T &value)
Deserializes the specified object value with the given name.
Definition: Deserializer.h:133
StreamAccessMixin(typename BinaryStream::streambuffer_pointer buffer)
Definition: BinarySerializer.h:137
VersionType version(VersionType version, AcceptDesiredVersion, const T *caller=NULL)
Definition: BinarySerializer.h:277
Definition: BinarySerializer.h:88
ConcreteBinaryDeserializer(typename BinaryStream::streambuffer_pointer buffer)
Create a new binary deserializer based on the specified stream buffer object.
Definition: BinarySerializer.h:1278
VersionType version(VersionType version, const T *caller=NULL)
Definition: BinarySerializer.h:267
typename ReflectorInterface< ConcreteBinarySerializer< mira::BinaryOstream, BinaryFormatVersion, false > >::AcceptDesiredVersion AcceptDesiredVersion
Definition: AbstractReflector.h:195
Type trait that indicates whether a type can be serialized bitwise by just copying the data buffer...
Definition: IsBitwiseSerializable.h:70
specialize cv::DataType for our ImgPixel and inherit from cv::DataType<Vec>
Definition: IOService.h:67
Definition: BinarySerializer.h:91
void member(const char *name, T &member, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:883
Serializer that uses BinaryOstream to serialize the objects in binary format.
Definition: BinarySerializer.h:254
static int forcedDeserializeVersion()
Returns either the version number from value of environment variable 'MIRA_FORCE_DESERIALIZE_VERSION'...
Definition: Deserializer.h:118
Is a special reflector that is used for serialization.
Definition: Serializer.h:126
void flushBuffer()
Flush stream buffer (write to underlying stream), nothing to do for unbuffered access.
Definition: BinarySerializer.h:146
~StreamAccessMixin()
Definition: BinarySerializer.h:168
#define MIRA_LOG(level)
Use this macro to log data.
Definition: LoggingCore.h:529
bool hasCodec() const
Returns true, of there is a codec for the specified type T.
Definition: BinarySerializer.h:788
Definition: BinarySerializer.h:90
#define BINARY_VERSION_MARKER
Definition: BinarySerializer.h:70
void pointerWithoutClassType()
Definition: BinarySerializer.h:673
void write(const T *data, std::size_t count)
Definition: BinarySerializer.h:739
void invokeOverwrite(serialization::PlainArray< T > &array)
Specialized for PlainArray to implement an optimized variant for serializing array, if possible (i.e.
Definition: BinarySerializer.h:716
Definition: BinarySerializer.h:980
Direct stream access.
Definition: BinarySerializer.h:128
StreamAccessMixin(BinaryStream &stream)
Definition: BinarySerializer.h:140
Definition: BinarySerializer.h:89
Used by BinarySerializer and BinaryDeserializer.
Definition: BinarySerializer.h:79
boost::mpl::bool_< false > useHumanReadableIDs
Definition: BinarySerializer.h:1256
Get compiler and platform independent typenames.
Base for buffered/unbuffered stream access.
Definition: BinarySerializer.h:102
void serialize(const std::string &name, const T &value, const std::string &comment="")
Serializes the specified object value under the given name.
Definition: Serializer.h:204
StreamAccessMixinBase(typename BinaryStream::streambuffer_pointer buffer)
Definition: BinarySerializer.h:105
serialization::VersionType VersionType
Definition: BinarySerializer.h:263
uint8 VersionType
Definition: ReflectorInterface.h:72
#define MIRA_THROW(ex, msg)
Macro for throwing an exception.
Definition: Exception.h:78
void reassign(typename BinaryStream::streambuffer_pointer buffer)
Reassigns the specified stream buffer to this deserializer.
Definition: BinarySerializer.h:1306
void serialize(const T &value, bool enableTypeCheck=true)
Provides a special serialize interface for the BinarySerializer.
Definition: BinarySerializer.h:590
bool codec(const T &obj)
Encodes the specified object containing the data using a matching codec.
Definition: BinarySerializer.h:307
BinaryBufferOstream SimpleStreamType
Definition: BinarySerializer.h:538
void pointerReference(int referencedObjectID)
Definition: BinarySerializer.h:662
Derived * This()
"Curiously recurring template pattern" (CRTP).
Definition: AbstractReflector.h:246
Format::requireReflectBarriers requireReflectBarriers
Definition: BinarySerializer.h:1261
bool hasCodec() const
Supported for compatibility with BinarySerializer in a common reflect method.
Definition: BinarySerializer.h:1522
Format::VersionType VersionType
Definition: BinarySerializer.h:1352
void registerCodec(BinarySerializerCodecPtr codec)
Registers the specified codec instance in this binary serializer.
Definition: BinarySerializer.h:756
bool hasCodec() const
Returns true, of there is a codec for the specified type T.
Definition: BinarySerializer.h:295
A four-character code that is used to identify data formats and codecs.
Definition: BinarySerializerCodec.h:121
Deserializer that uses BinaryIstream to deserialize the objects from binary format.
Definition: BinarySerializer.h:925
Provides type trait that indicates whether a type can be serialized bitwise.
PropertyHint type(const std::string &t)
Sets the attribute "type" to the specified value.
Definition: PropertyHint.h:295
Format::ReflectState preReflect(const char *context="")
Definition: BinarySerializer.h:640
Contains base class for all deserializers.
const CodecsMap & getCodecs() const
Return the map of currently known codecs.
Definition: BinarySerializer.h:1570
void invokeOverwrite(T &object)
Definition: BinarySerializer.h:700
BinaryBufferOstream & stream()
Get access to the read/write stream, returns reference to buffer stream (overriding the base class' s...
Definition: BinarySerializer.h:177
VersionType version(VersionType expectedVersion, const T *object=NULL)
Definition: BinarySerializer.h:1355
Tag class used as parameter to ReflectorInterface::version() etc.
Definition: ReflectorInterface.h:80
Base class for codecs for BinarySerializer and BinaryDeserializer.
void write(const T *data, std::size_t count)
Definition: BinarySerializer.h:284
void read(T *data, std::size_t count)
Definition: BinarySerializer.h:1510
ConcreteBinarySerializer(typename BinaryStream::streambuffer_pointer buffer)
Create a new binary serializer based on the specified stream buffer object.
Definition: BinarySerializer.h:563
serialization::AcceptDesiredVersion AcceptDesiredVersion
Definition: BinarySerializer.h:264
void pointerNull()
Definition: BinarySerializer.h:695
VersionType version(VersionType version, AcceptDesiredVersion, const T *caller=NULL)
Definition: BinarySerializer.h:942
typename ReflectorInterface< ConcreteBinarySerializer< mira::BinaryOstream, BinaryFormatVersion, false > >::VersionType VersionType
Definition: AbstractReflector.h:165
int TypeId
The type of the integral TypeId, that can be retrieved by typeId<T>()
Definition: TypeId.h:64
StreamAccessMixin(BinaryStream &stream)
Definition: BinarySerializer.h:166
ConcreteBinaryDeserializer(BinaryStream &stream, typename BinaryStream::pos_type pos)
Create a new binary deserializer and read the data from the specified binary stream, starting at the specified position.
Definition: BinarySerializer.h:1296
void setCodecs(const CodecsMap &codecs)
Set the map of known codecs.
Definition: BinarySerializer.h:1575
VersionType version(VersionType version, const T *caller=NULL)
Definition: BinarySerializer.h:609
VersionType version(VersionType version, const T *caller=NULL)
Definition: BinarySerializer.h:932
static int forcedSerializeVersion()
Returns either the version number from value of environment variable 'MIRA_FORCE_SERIALIZE_VERSION', or -1 (= do not force a version).
Definition: Serializer.h:145
StreamAccessMixin(typename BinaryStream::streambuffer_pointer buffer)
Definition: BinarySerializer.h:163
void flushBuffer()
Flush buffer stream to underlying stream.
Definition: BinarySerializer.h:180
bool hasCodec() const
Returns true, of there is a codec for the specified type T.
Definition: BinarySerializer.h:960
Contains the BinaryIStream and BinaryOStream classes for fast and efficient streaming of binary data...
Format::ReflectState preReflect(const char *context="")
Definition: BinarySerializer.h:1392
BinaryStream::pos_type streamPosition()
Definition: BinarySerializer.h:1310
void atomic(T &member)
Definition: BinarySerializer.h:1376
BinaryStream StreamType
The type of stream the serializer writes to (the actual output stream here)
Definition: BinarySerializer.h:134
void postReflect(const typename Format::ReflectState &prev)
Definition: BinarySerializer.h:646
void deserialize(T &value, bool enableTypeCheck=true, bool recursive=false)
Provides a special deserialize interface for the BinaryDeserializer.
Definition: BinarySerializer.h:1329
void pointerWithClassType(const std::string &type)
Definition: BinarySerializer.h:685
bool codec(T &obj)
Decodes the specified object from the serialized data.
Definition: BinarySerializer.h:971
VersionType version(VersionType expectedVersion, AcceptDesiredVersion, const T *object=NULL)
Definition: BinarySerializer.h:1371
Definition: BinarySerializer.h:257
Format::VersionType VersionType
Definition: BinarySerializer.h:606
ConcreteBinaryDeserializer(BinaryStream &stream)
Create a new binary deserializer and read the data from the specified binary stream.
Definition: BinarySerializer.h:1287
BinarySerializerTag Tag
Definition: BinarySerializer.h:260
Format::requireReflectBarriers requireReflectBarriers
Definition: BinarySerializer.h:547
serialization::VersionType VersionType
Definition: BinarySerializer.h:928
void read(T *data, std::size_t count)
Definition: BinarySerializer.h:949
BinaryStream & stream()
Get access to the read/write stream (direct reference to underlying stream).
Definition: BinarySerializer.h:120
BinaryBufferOstream StreamType
The type of stream the serializer writes to (the buffer stream here).
Definition: BinarySerializer.h:160
std::string pointerClassType()
Definition: BinarySerializer.h:1460
static Fourcc null()
Returns the 'NULL' fourcc.
Definition: BinarySerializerCodec.h:142
void postReflect(const typename Format::ReflectState &prev)
Definition: BinarySerializer.h:1397
MIRA_DEPRECATED("Please call as version<MyType>(v) or version(v, this)", VersionType version(VersionType version))
Definition: BinarySerializer.h:615
serialization::AcceptDesiredVersion AcceptDesiredVersion
Definition: BinarySerializer.h:929
PointerType
Pointer type that is stored as 1-byte marker before storing the pointer.
Definition: BinarySerializer.h:86
char fourcc[4]
Definition: BinarySerializerCodec.h:165
void reassign(typename BinaryStream::streambuffer_pointer buffer)
Reassigns the specified stream buffer to this (serializer).
Definition: BinarySerializer.h:116
void atomic(T &member)
Is called if the member is an atomic type (int, float, etc).
Definition: RecursiveMemberReflector.h:288
MIRA_DEPRECATED("Please call as version<MyType>(v) or version(v, this)", VersionType version(VersionType version))
Definition: BinarySerializer.h:936
void atomic(T &member)
Definition: BinarySerializer.h:633
void unregisterCodec(BinarySerializerCodecPtr codec)
Removes a previously registered codec.
Definition: BinarySerializer.h:767
void invokeOverwrite(T &object)
Definition: BinarySerializer.h:1466
Definition: LoggingCore.h:77
Is a special reflector that is used for deserialization.
Definition: Deserializer.h:99
bool codec(const T &obj)
Encodes the specified object containing the data using a matching codec.
Definition: BinarySerializer.h:800
std::map< TypeId, BinarySerializerCodecPtr > CodecsMap
A map of binary serialization codecs.
Definition: BinarySerializer.h:1259
boost::shared_ptr< BinarySerializerCodec > BinarySerializerCodecPtr
Shared pointer of BinarySerializerCodec.
Definition: BinarySerializerCodec.h:64
VersionType version(VersionType version, AcceptDesiredVersion, const T *caller=NULL)
Definition: BinarySerializer.h:623
StreamAccessMixinBase(BinaryStream &stream)
Definition: BinarySerializer.h:108