Main MRPT website > C++ reference for MRPT 1.9.9
List of all members | Public Member Functions | Protected Member Functions
mrpt::serialization::CArchive Class Referenceabstract

Detailed Description

Virtual base class for "archives": classes abstracting I/O streams.

This class separates the implementation details of serialization (in CSerializable) and data storage (CArchive children: files, sockets,...).

Two main sets of implementations are provided:

See also
mrpt::io::CArchive, mrpt::serialization::CSerializable

Definition at line 48 of file CArchive.h.

#include <mrpt/serialization/CArchive.h>

Inheritance diagram for mrpt::serialization::CArchive:
Inheritance graph

Public Member Functions

 CArchive ()
 
virtual ~CArchive ()
 

Protected Member Functions

void internal_ReadObject (CSerializable *newObj, const std::string &className, bool isOldFormat, int8_t version)
 Read the object. More...
 
void internal_ReadObjectHeader (std::string &className, bool &isOldFormat, int8_t &version)
 Read the object Header. More...
 
Virtual methods of the CArchive interface
virtual size_t write (const void *buf, size_t len)=0
 Writes a block of bytes. More...
 
virtual size_t read (void *buf, size_t len)=0
 Reads a block of bytes. More...
 

Serialization API for generic "archives" I/O streams

size_t ReadBuffer (void *Buffer, size_t Count)
 Reads a block of bytes from the stream into Buffer. More...
 
template<typename T >
size_t ReadBufferFixEndianness (T *ptr, size_t ElementCount)
 Reads a sequence of elemental datatypes, taking care of reordering their bytes from the MRPT stream standard (little endianness) to the format of the running architecture. More...
 
void WriteBuffer (const void *Buffer, size_t Count)
 Writes a block of bytes to the stream from Buffer. More...
 
template<typename T >
void WriteBufferFixEndianness (const T *ptr, size_t ElementCount)
 Writes a sequence of elemental datatypes, taking care of reordering their bytes from the running architecture to MRPT stream standard (little endianness). More...
 
template<typename STORED_TYPE , typename CAST_TO_TYPE >
void ReadAsAndCastTo (CAST_TO_TYPE &read_here)
 Read a value from a stream stored in a type different of the target variable, making the conversion via static_cast. More...
 
template<typename STORED_TYPE >
STORED_TYPE ReadAs ()
 De-serialize a variable and returns it by value. More...
 
template<typename TYPE_TO_STORE , typename TYPE_FROM_ACTUAL >
void WriteAs (const TYPE_FROM_ACTUAL &value)
 
void WriteObject (const CSerializable *o)
 Writes an object to the stream. More...
 
void WriteObject (const CSerializable &o)
 
CSerializable::Ptr ReadObject ()
 Reads an object from stream, its class determined at runtime, and returns a smart pointer to the object. More...
 
template<typename T >
T::Ptr ReadObject ()
 Reads an object from stream, its class determined at runtime, and returns a smart pointer to the object. More...
 
template<typename T , typename T2 , typename ... REST>
const mrpt::rtti::TRuntimeClassIdfindRegisteredClassInList (std::string_view strClassName)
 
template<typename T >
const mrpt::rtti::TRuntimeClassIdfindRegisteredClassInList (std::string_view strClassName)
 
template<typename... T>
std::variant< T... > ReadVariant ()
 Reads a variant from stream, its class determined at runtime, and returns a variant to the object. More...
 
template<typename T >
void WriteVariant (T t)
 Writes a Variant to the stream. More...
 
template<typename T >
ReadPOD ()
 Reads a simple POD type and returns by value. More...
 
void ReadObject (CSerializable *existingObj)
 Reads an object from stream, where its class must be the same as the supplied object, where the loaded object will be stored in. More...
 
void sendMessage (const CMessage &msg)
 Send a message to the device. More...
 
bool receiveMessage (CMessage &msg)
 Tries to receive a message from the device. More...
 
CArchiveoperator<< (const CSerializable &obj)
 Write a CSerializable object to a stream in the binary MRPT format. More...
 
CArchiveoperator<< (const CSerializable::Ptr &pObj)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 
CArchiveoperator>> (CSerializable &obj)
 Reads a CSerializable object from the stream. More...
 
CArchiveoperator>> (CSerializable::Ptr &pObj)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 
template<typename RET >
RET ReadVariant_helper (CSerializable::Ptr &ptr)
 
template<typename RET , typename T , typename... R>
RET ReadVariant_helper (CSerializable::Ptr &ptr, std::enable_if_t< mrpt::is_shared_ptr< T >::value > *=nullptr)
 
template<typename RET , typename T , typename... R>
RET ReadVariant_helper (CSerializable::Ptr &ptr, std::enable_if_t<!mrpt::is_shared_ptr< T >::value > *=nullptr)
 

Constructor & Destructor Documentation

◆ CArchive()

mrpt::serialization::CArchive::CArchive ( )
inline

Definition at line 51 of file CArchive.h.

◆ ~CArchive()

virtual mrpt::serialization::CArchive::~CArchive ( )
inlinevirtual

Definition at line 52 of file CArchive.h.

Member Function Documentation

◆ findRegisteredClassInList() [1/2]

template<typename T , typename T2 , typename ... REST>
const mrpt::rtti::TRuntimeClassId* mrpt::serialization::CArchive::findRegisteredClassInList ( std::string_view  strClassName)
inline

Definition at line 236 of file CArchive.h.

References mrpt::rtti::TRuntimeClassId::className.

Referenced by ReadVariant().

◆ findRegisteredClassInList() [2/2]

template<typename T >
const mrpt::rtti::TRuntimeClassId* mrpt::serialization::CArchive::findRegisteredClassInList ( std::string_view  strClassName)
inline

Definition at line 243 of file CArchive.h.

References mrpt::rtti::TRuntimeClassId::className.

◆ internal_ReadObject()

void CArchive::internal_ReadObject ( CSerializable newObj,
const std::string className,
bool  isOldFormat,
int8_t  version 
)
protected

Read the object.

Definition at line 483 of file CArchive.cpp.

References ReadBuffer(), SERIALIZATION_END_FLAG, THROW_EXCEPTION, THROW_EXCEPTION_FMT, and THROW_TYPED_EXCEPTION.

Referenced by ReadObject(), and ReadVariant().

◆ internal_ReadObjectHeader()

void CArchive::internal_ReadObjectHeader ( std::string className,
bool &  isOldFormat,
int8_t version 
)
protected

Read the object Header.

Definition at line 380 of file CArchive.cpp.

References ASSERT_, ReadBuffer(), ReadBufferFixEndianness(), THROW_EXCEPTION, THROW_STACKED_EXCEPTION_CUSTOM_MSG2, and THROW_TYPED_EXCEPTION.

Referenced by ReadObject(), and ReadVariant().

◆ operator<<() [1/2]

CArchive & CArchive::operator<< ( const CSerializable obj)

Write a CSerializable object to a stream in the binary MRPT format.

Write an object to a stream in the binary MRPT format.

Definition at line 187 of file CArchive.cpp.

References WriteObject().

◆ operator<<() [2/2]

CArchive & CArchive::operator<< ( const CSerializable::Ptr pObj)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 180 of file CArchive.cpp.

References WriteObject().

◆ operator>>() [1/2]

CArchive & CArchive::operator>> ( CSerializable obj)

Reads a CSerializable object from the stream.

Definition at line 199 of file CArchive.cpp.

References ReadObject().

◆ operator>>() [2/2]

CArchive & CArchive::operator>> ( CSerializable::Ptr pObj)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 193 of file CArchive.cpp.

References ReadObject().

◆ read()

virtual size_t mrpt::serialization::CArchive::read ( void buf,
size_t  len 
)
protectedpure virtual

◆ ReadAs()

template<typename STORED_TYPE >
STORED_TYPE mrpt::serialization::CArchive::ReadAs ( )
inline

De-serialize a variable and returns it by value.

Definition at line 145 of file CArchive.h.

◆ ReadAsAndCastTo()

template<typename STORED_TYPE , typename CAST_TO_TYPE >
void mrpt::serialization::CArchive::ReadAsAndCastTo ( CAST_TO_TYPE &  read_here)
inline

Read a value from a stream stored in a type different of the target variable, making the conversion via static_cast.

Useful for coding backwards compatible de-serialization blocks

Definition at line 137 of file CArchive.h.

Referenced by mrpt::maps::CPointsMap::TRenderOptions::readFromStream().

◆ ReadBuffer()

size_t CArchive::ReadBuffer ( void Buffer,
size_t  Count 
)

Reads a block of bytes from the stream into Buffer.

Exceptions
std::exceptionOn any error, or if ZERO bytes are read.
Returns
The amound of bytes actually read.
Note
This method is endianness-dependent.
See also
ReadBufferImmediate ; Important, see: ReadBufferFixEndianness,

Definition at line 24 of file CArchive.cpp.

References ASSERT_, read(), and THROW_EXCEPTION.

Referenced by internal_ReadObject(), internal_ReadObjectHeader(), ReadBufferFixEndianness(), receiveMessage(), and mrpt::obs::CObservationVelodyneScan::serializeFrom().

◆ ReadBufferFixEndianness()

template<typename T >
size_t mrpt::serialization::CArchive::ReadBufferFixEndianness ( T *  ptr,
size_t  ElementCount 
)
inline

Reads a sequence of elemental datatypes, taking care of reordering their bytes from the MRPT stream standard (little endianness) to the format of the running architecture.

Parameters
ElementCountThe number of elements (not bytes) to read.
ptrA pointer to the first output element in an array (or std::vector<>, etc...).
Returns
The amound of bytes (not elements) actually read (under error situations, the last element may be invalid if the data stream abruptly ends). Example of usage:
s >> N;
vector<float> vec(N);
if (N)
s.ReadBufferFixEndianness<float>(&vec[0],N);
Exceptions
std::exceptionOn any error, or if ZERO bytes are read.
See also
ReadBufferFixEndianness, ReadBuffer

Definition at line 84 of file CArchive.h.

References ReadBuffer(), and mrpt::reverseBytesInPlace().

Referenced by internal_ReadObjectHeader(), mrpt::math::operator>>(), ReadPOD(), and triangle_readFromStream().

◆ ReadObject() [1/3]

CSerializable::Ptr mrpt::serialization::CArchive::ReadObject ( )
inline

Reads an object from stream, its class determined at runtime, and returns a smart pointer to the object.

Exceptions
std::exceptionOn I/O error or undefined class.
CExceptionEOFOn an End-Of-File condition found at a correct place: an EOF that abruptly finishes in the middle of one object raises a plain std::exception instead.

Definition at line 167 of file CArchive.h.

Referenced by operator>>().

◆ ReadObject() [2/3]

template<typename T >
T::Ptr mrpt::serialization::CArchive::ReadObject ( )
inline

Reads an object from stream, its class determined at runtime, and returns a smart pointer to the object.

This version is similar to mrpt::make_aligned_shared<T>.

Exceptions
std::exceptionOn I/O error or undefined class.
CExceptionEOFOn an End-Of-File condition found at a correct place: an EOF that abruptly finishes in the middle of one object raises a plain std::exception instead.

Definition at line 177 of file CArchive.h.

References mrpt::rtti::TRuntimeClassId::createObject(), mrpt::rtti::findRegisteredClass(), internal_ReadObject(), internal_ReadObjectHeader(), and THROW_EXCEPTION_FMT.

◆ ReadObject() [3/3]

void CArchive::ReadObject ( CSerializable existingObj)

Reads an object from stream, where its class must be the same as the supplied object, where the loaded object will be stored in.

Exceptions
std::exceptionOn I/O error or different class found.
CExceptionEOFOn an End-Of-File condition found at a correct place: an EOF that abruptly finishes in the middle of one object raises a plain std::exception instead.

Definition at line 526 of file CArchive.cpp.

References ASSERT_, mrpt::format(), mrpt::serialization::CSerializable::GetRuntimeClass(), internal_ReadObject(), internal_ReadObjectHeader(), and THROW_EXCEPTION.

◆ ReadPOD()

template<typename T >
T mrpt::serialization::CArchive::ReadPOD ( )
inline

Reads a simple POD type and returns by value.

Useful when stream >> var; cannot be used becuase of errors of misaligned reference binding. Use with macro MRPT_READ_POD to avoid typing the type T yourself.

Note
[New in MRPT 2.0.0]
Write operator s << var; is safe for misaligned variables.

Definition at line 305 of file CArchive.h.

References ReadBufferFixEndianness().

◆ ReadVariant()

template<typename... T>
std::variant<T...> mrpt::serialization::CArchive::ReadVariant ( )
inline

Reads a variant from stream, its class determined at runtime, and returns a variant to the object.

To be compatible with the current polymorphic system this support smart pointer types. For pointer types, This will bind to the first possible pointer type. variant<CSerializable::Ptr, CRenderizable::Ptr>

Exceptions
std::exceptionOn I/O error or undefined class.
CExceptionEOFOn an End-Of-File condition found at a correct place: an EOF that abruptly finishes in the middle of one object raises a plain std::exception instead.

Definition at line 261 of file CArchive.h.

References mrpt::rtti::TRuntimeClassId::createObject(), findRegisteredClassInList(), internal_ReadObject(), internal_ReadObjectHeader(), ReadVariant_helper(), and THROW_EXCEPTION_FMT.

Referenced by mrpt::serialization::operator>>().

◆ ReadVariant_helper() [1/3]

template<typename RET >
RET mrpt::serialization::CArchive::ReadVariant_helper ( CSerializable::Ptr ptr)
inlineprivate

Definition at line 209 of file CArchive.h.

Referenced by ReadVariant(), and ReadVariant_helper().

◆ ReadVariant_helper() [2/3]

template<typename RET , typename T , typename... R>
RET mrpt::serialization::CArchive::ReadVariant_helper ( CSerializable::Ptr ptr,
std::enable_if_t< mrpt::is_shared_ptr< T >::value > *  = nullptr 
)
inlineprivate

Definition at line 216 of file CArchive.h.

References IS_CLASS, R, and ReadVariant_helper().

◆ ReadVariant_helper() [3/3]

template<typename RET , typename T , typename... R>
RET mrpt::serialization::CArchive::ReadVariant_helper ( CSerializable::Ptr ptr,
std::enable_if_t<!mrpt::is_shared_ptr< T >::value > *  = nullptr 
)
inlineprivate

Definition at line 226 of file CArchive.h.

References IS_CLASS, R, and ReadVariant_helper().

◆ receiveMessage()

bool CArchive::receiveMessage ( CMessage msg)

Tries to receive a message from the device.

Exceptions
std::exceptionOn communication errors
Returns
True if successful, false if there is no new data from the device (but communications seem to work fine)
See also
The frame format is described in sendMessage()

Definition at line 603 of file CArchive.cpp.

References mrpt::serialization::CMessage::content, MAKEWORD16B, mrpt::system::os::memcpy(), MRPT_END, MRPT_START, ReadBuffer(), and mrpt::serialization::CMessage::type.

◆ sendMessage()

void CArchive::sendMessage ( const CMessage msg)

Send a message to the device.

Note that only the low byte from the "type" field will be used.

For frames of size < 255 the frame format is an array of bytes in this order:

<START_FLAG> <HEADER> <LENGTH> <BODY> <END_FLAG>
<START_FLAG> = 0x69
<HEADER> = A header byte
<LENGHT> = Number of bytes of BODY
<BODY> = N x bytes
<END_FLAG> = 0X96
Total length = <LENGTH> + 4

For frames of size > 255 the frame format is an array of bytes in this order:

<START_FLAG> <HEADER> <HIBYTE(LENGTH)> <LOBYTE(LENGTH)> <BODY>
<END_FLAG>
<START_FLAG> = 0x79
<HEADER> = A header byte
<LENGHT> = Number of bytes of BODY
<BODY> = N x bytes
<END_FLAG> = 0X96
Total length = <LENGTH> + 5
Exceptions
std::exceptionOn communication errors

Definition at line 569 of file CArchive.cpp.

References mrpt::serialization::CMessage::content, mrpt::system::os::memcpy(), MRPT_END, MRPT_START, mrpt::serialization::CMessage::type, and WriteBuffer().

◆ write()

virtual size_t mrpt::serialization::CArchive::write ( const void buf,
size_t  len 
)
protectedpure virtual

◆ WriteAs()

template<typename TYPE_TO_STORE , typename TYPE_FROM_ACTUAL >
void mrpt::serialization::CArchive::WriteAs ( const TYPE_FROM_ACTUAL &  value)
inline

◆ WriteBuffer()

void CArchive::WriteBuffer ( const void Buffer,
size_t  Count 
)

◆ WriteBufferFixEndianness()

template<typename T >
void mrpt::serialization::CArchive::WriteBufferFixEndianness ( const T *  ptr,
size_t  ElementCount 
)
inline

Writes a sequence of elemental datatypes, taking care of reordering their bytes from the running architecture to MRPT stream standard (little endianness).

Parameters
ElementCountThe number of elements (not bytes) to write.
ptrA pointer to the first input element in an array (or std::vector<>, etc...). Example of usage:
vector<float> vec = ...
uint32_t N = vec.size();
s << N
if (N)
s.WriteBufferFixEndianness<float>(&vec[0],N);
Exceptions
std::exceptionOn any error
See also
WriteBuffer

Definition at line 123 of file CArchive.h.

References WriteBuffer().

Referenced by mrpt::math::operator<<(), mrpt::math::CPolygon::serializeTo(), mrpt::math::CMatrix::serializeTo(), mrpt::math::CMatrixD::serializeTo(), mrpt::maps::CColouredPointsMap::serializeTo(), mrpt::maps::CWeightedPointsMap::serializeTo(), mrpt::maps::CSimplePointsMap::serializeTo(), mrpt::obs::CObservation2DRangeScan::serializeTo(), mrpt::maps::COccupancyGridMap2D::serializeTo(), mrpt::obs::CObservation3DRangeScan::serializeTo(), and triangle_writeToStream().

◆ WriteObject() [1/2]

void mrpt::serialization::CArchive::WriteObject ( const CSerializable o)
inline

Definition at line 159 of file CArchive.h.

References WriteObject().

Referenced by WriteObject().

◆ WriteObject() [2/2]

void CArchive::WriteObject ( const CSerializable o)

◆ WriteVariant()

template<typename T >
void mrpt::serialization::CArchive::WriteVariant ( t)
inline

Writes a Variant to the stream.

Definition at line 292 of file CArchive.h.

References WriteObject().

s
GLdouble s
Definition: glext.h:3676
mrpt::obs::gnss::header
nv_oem6_header_t header
Novatel frame: NV_OEM6_BESTPOS.
Definition: gnss_messages_novatel.h:226
length
GLuint GLsizei GLsizei * length
Definition: glext.h:4064
LENGTH
@ LENGTH
Definition: inflate.h:50
uint32_t
unsigned __int32 uint32_t
Definition: rptypes.h:47
x
GLenum GLint x
Definition: glext.h:3538



Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST