MRPT
2.0.1
|
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:
Definition at line 54 of file CArchive.h.
#include <mrpt/serialization/CArchive.h>
Public Types | |
using | Ptr = std::shared_ptr< CArchive > |
using | UniquePtr = std::unique_ptr< CArchive > |
Public Member Functions | |
CArchive ()=default | |
virtual | ~CArchive ()=default |
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 > | |
CArchive & | 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> | |
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 > | |
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... | |
CArchive & | operator<< (const CSerializable &obj) |
Write a CSerializable object to a stream in the binary MRPT format. More... | |
CArchive & | operator<< (const CSerializable::Ptr &pObj) |
CArchive & | operator>> (CSerializable &obj) |
Reads a CSerializable object from the stream. More... | |
CArchive & | operator>> (CSerializable::Ptr &pObj) |
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) |
Definition at line 60 of file CArchive.h.
using mrpt::serialization::CArchive::UniquePtr = std::unique_ptr<CArchive> |
Definition at line 61 of file CArchive.h.
|
default |
|
virtualdefault |
|
protected |
Read the object.
Definition at line 428 of file CArchive.cpp.
References ReadBuffer(), SERIALIZATION_END_FLAG, mrpt::serialization::CSerializable::serializeFrom(), THROW_EXCEPTION, THROW_EXCEPTION_FMT, and THROW_STACKED_EXCEPTION_CUSTOM_MSG2.
Referenced by ReadObject(), and ReadVariant().
|
protected |
Read the object Header.
Definition at line 329 of file CArchive.cpp.
References ASSERT_, ReadBuffer(), ReadBufferFixEndianness(), THROW_EXCEPTION, THROW_STACKED_EXCEPTION_CUSTOM_MSG2, and THROW_TYPED_EXCEPTION.
Referenced by ReadObject(), and ReadVariant().
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 146 of file CArchive.cpp.
References WriteObject().
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 139 of file CArchive.cpp.
References WriteObject().
CArchive & CArchive::operator>> | ( | CSerializable & | obj | ) |
Reads a CSerializable object from the stream.
Definition at line 158 of file CArchive.cpp.
References ReadObject().
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 152 of file CArchive.cpp.
References ReadObject().
|
protectedpure virtual |
Reads a block of bytes.
std::exception | On any error, or if ZERO bytes are read. |
Implemented in mrpt::serialization::CArchiveStreamBase< STREAM >, mrpt::serialization::CArchiveStreamBase< std::iostream >, mrpt::serialization::CArchiveStreamBase< const std::vector< uint8_t > >, mrpt::serialization::CArchiveStreamBase< std::ostream >, mrpt::serialization::CArchiveStreamBase< std::vector< uint8_t > >, and mrpt::serialization::CArchiveStreamBase< std::istream >.
Referenced by ReadBuffer().
|
inline |
De-serialize a variable and returns it by value.
Definition at line 155 of file CArchive.h.
Referenced by mrpt::obs::gnss::Message_NV_OEM6_GENERIC_FRAME::internal_readFromStream(), mrpt::obs::gnss::Message_NV_OEM6_GENERIC_SHORT_FRAME::internal_readFromStream(), mrpt::math::operator>>(), mrpt::opengl::CRenderizableShaderPoints::params_deserialize(), mrpt::math::CMatrixF::serializeFrom(), mrpt::poses::CPoses3DSequence::serializeFrom(), mrpt::math::CMatrixD::serializeFrom(), mrpt::poses::CPoses2DSequence::serializeFrom(), mrpt::poses::CPose3DPDFGrid::serializeFrom(), mrpt::obs::CActionCollection::serializeFrom(), mrpt::obs::CActionRobotMovement2D::serializeFrom(), mrpt::opengl::CMesh3D::serializeFrom(), mrpt::obs::CObservationRotatingScan::serializeFrom(), mrpt::obs::CRawlog::serializeFrom(), mrpt::obs::CObservationRGBD360::serializeFrom(), and mrpt::obs::CObservation3DRangeScan::serializeFrom().
|
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 147 of file CArchive.h.
Referenced by mrpt::nav::ClearanceDiagram::readFromStream(), mrpt::maps::CPointsMap::TRenderOptions::readFromStream(), mrpt::nav::CLogFileRecord::serializeFrom(), mrpt::maps::COccupancyGridMap3D::serializeFrom(), and mrpt::opengl::CColorBar::serializeFrom().
size_t CArchive::ReadBuffer | ( | void * | Buffer, |
size_t | Count | ||
) |
Reads a block of bytes from the stream into Buffer.
std::exception | On any error, or if ZERO bytes are read. |
Definition at line 25 of file CArchive.cpp.
References ASSERT_, read(), and THROW_EXCEPTION.
Referenced by mrpt::obs::gnss::Message_NV_OEM6_GENERIC_FRAME::internal_readFromStream(), mrpt::obs::gnss::Message_NV_OEM6_GENERIC_SHORT_FRAME::internal_readFromStream(), mrpt::obs::gnss::Message_NV_OEM6_RANGECMP::internal_readFromStream(), mrpt::obs::gnss::Message_NV_OEM6_VERSION::internal_readFromStream(), internal_ReadObject(), internal_ReadObjectHeader(), mrpt::serialization::operator>>(), ReadBufferFixEndianness(), mrpt::opengl::CRenderizable::readFromStreamRender(), receiveMessage(), mrpt::math::CMatrixB::serializeFrom(), mrpt::obs::CActionRobotMovement2D::serializeFrom(), mrpt::maps::CWirelessPowerGridMap2D::serializeFrom(), mrpt::maps::CGasConcentrationGridMap2D::serializeFrom(), mrpt::maps::CHeightGridMap2D_MRF::serializeFrom(), mrpt::maps::COccupancyGridMap3D::serializeFrom(), mrpt::maps::CReflectivityGridMap2D::serializeFrom(), mrpt::obs::CObservation2DRangeScan::serializeFrom(), mrpt::maps::COccupancyGridMap2D::serializeFrom(), mrpt::obs::CObservationGPS::serializeFrom(), mrpt::maps::CRandomFieldGridMap3D::serializeFrom(), mrpt::obs::CObservationVelodyneScan::serializeFrom(), mrpt::img::CImage::serializeFrom(), mrpt::nav::CLogFileRecord_ND::serializeFrom(), and mrpt::obs::CObservation3DRangeScan::serializeFrom().
|
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.
ElementCount | The number of elements (not bytes) to read. |
ptr | A pointer to the first output element in an array (or std::vector<>, etc...). |
std::exception | On any error, or if ZERO bytes are read. |
Definition at line 94 of file CArchive.h.
References ReadBuffer(), and mrpt::reverseBytesInPlace().
Referenced by internal_ReadObjectHeader(), mrpt::math::operator>>(), ReadPOD(), mrpt::serialization::detail::readStdVectorToStream(), mrpt::math::CPolygon::serializeFrom(), mrpt::math::CMatrixF::serializeFrom(), mrpt::math::CMatrixD::serializeFrom(), mrpt::maps::CPointsMapXYZI::serializeFrom(), mrpt::maps::CColouredPointsMap::serializeFrom(), mrpt::maps::CWeightedPointsMap::serializeFrom(), mrpt::nav::CLogFileRecord::serializeFrom(), mrpt::maps::CSimplePointsMap::serializeFrom(), mrpt::maps::COccupancyGridMap3D::serializeFrom(), mrpt::opengl::CMesh3D::serializeFrom(), mrpt::obs::CSensoryFrame::serializeFrom(), mrpt::obs::CObservation2DRangeScan::serializeFrom(), mrpt::maps::COccupancyGridMap2D::serializeFrom(), mrpt::obs::CObservationRotatingScan::serializeFrom(), mrpt::obs::CObservationGPS::serializeFrom(), mrpt::obs::CObservationRGBD360::serializeFrom(), and mrpt::obs::CObservation3DRangeScan::serializeFrom().
|
inline |
Reads an object from stream, its class determined at runtime, and returns a smart pointer to the object.
std::exception | On I/O error or undefined class. |
CExceptionEOF | On 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 178 of file CArchive.h.
Referenced by mrpt::math::operator>>(), operator>>(), mrpt::serialization::operator>>(), mrpt::nav::CLogFileRecord::serializeFrom(), and mrpt::obs::CRawlog::serializeFrom().
|
inline |
Reads an object from stream, its class determined at runtime, and returns a smart pointer to the object.
This version is similar to std::make_shared<T>.
std::exception | On I/O error or undefined class. |
CExceptionEOF | On 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 188 of file CArchive.h.
References mrpt::rtti::TRuntimeClassId::createObject(), mrpt::rtti::findRegisteredClass(), mrpt::ptr_cast< CAST_TO >::from(), internal_ReadObject(), internal_ReadObjectHeader(), and THROW_EXCEPTION_FMT.
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.
std::exception | On I/O error or different class found. |
CExceptionEOF | On 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 473 of file CArchive.cpp.
References ASSERT_, mrpt::rtti::findRegisteredClass(), mrpt::format(), mrpt::serialization::CSerializable::GetRuntimeClass(), internal_ReadObject(), internal_ReadObjectHeader(), THROW_EXCEPTION, and THROW_EXCEPTION_FMT.
|
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.
s << var;
is safe for misaligned variables. Definition at line 303 of file CArchive.h.
References ReadBufferFixEndianness().
Referenced by mrpt::obs::CObservationPointCloud::serializeFrom().
|
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>
std::exception | On I/O error or undefined class. |
CExceptionEOF | On 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 258 of file CArchive.h.
References mrpt::rtti::TRuntimeClassId::createObject(), mrpt::rtti::findRegisteredClass(), mrpt::ptr_cast< CAST_TO >::from(), internal_ReadObject(), internal_ReadObjectHeader(), ReadVariant_helper(), and THROW_EXCEPTION_FMT.
Referenced by mrpt::serialization::operator>>().
|
inlineprivate |
Definition at line 220 of file CArchive.h.
Referenced by ReadVariant(), and ReadVariant_helper().
|
inlineprivate |
Definition at line 227 of file CArchive.h.
References IS_CLASS, R, and ReadVariant_helper().
|
inlineprivate |
Definition at line 237 of file CArchive.h.
References IS_CLASS, R, and ReadVariant_helper().
bool CArchive::receiveMessage | ( | CMessage & | msg | ) |
Tries to receive a message from the device.
std::exception | On communication errors |
Definition at line 555 of file CArchive.cpp.
References mrpt::serialization::CMessage::content, MAKEWORD16B, mrpt::system::os::memcpy(), MRPT_END, MRPT_START, ReadBuffer(), and mrpt::serialization::CMessage::type.
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:
For frames of size > 255 the frame format is an array of bytes in this order:
std::exception | On communication errors |
Definition at line 521 of file CArchive.cpp.
References mrpt::serialization::CMessage::content, mrpt::system::os::memcpy(), MRPT_END, MRPT_START, mrpt::serialization::CMessage::type, and WriteBuffer().
|
protectedpure virtual |
Writes a block of bytes.
std::exception | On any error |
Implemented in mrpt::serialization::CArchiveStreamBase< STREAM >, mrpt::serialization::CArchiveStreamBase< std::iostream >, mrpt::serialization::CArchiveStreamBase< const std::vector< uint8_t > >, mrpt::serialization::CArchiveStreamBase< std::ostream >, mrpt::serialization::CArchiveStreamBase< std::vector< uint8_t > >, and mrpt::serialization::CArchiveStreamBase< std::istream >.
Referenced by WriteBuffer().
|
inline |
Definition at line 162 of file CArchive.h.
Referenced by mrpt::math::operator<<().
void CArchive::WriteBuffer | ( | const void * | Buffer, |
size_t | Count | ||
) |
Writes a block of bytes to the stream from Buffer.
std::exception | On any error |
Definition at line 49 of file CArchive.cpp.
References ASSERT_, THROW_EXCEPTION, and write().
Referenced by sendMessage(), WriteBufferFixEndianness(), and WriteObject().
|
inline |
Writes a sequence of elemental datatypes, taking care of reordering their bytes from the running architecture to MRPT stream standard (little endianness).
ElementCount | The number of elements (not bytes) to write. |
ptr | A 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); |
std::exception | On any error |
Definition at line 133 of file CArchive.h.
References WriteBuffer().
Referenced by mrpt::math::operator<<(), and mrpt::serialization::detail::writeStdVectorToStream().
void CArchive::WriteObject | ( | const CSerializable * | o | ) |
Writes an object to the stream.
Definition at line 101 of file CArchive.cpp.
References mrpt::rtti::TRuntimeClassId::className, mrpt::serialization::CSerializable::GetRuntimeClass(), MRPT_END, MRPT_START, SERIALIZATION_END_FLAG, mrpt::serialization::CSerializable::serializeGetVersion(), mrpt::serialization::CSerializable::serializeTo(), and WriteBuffer().
Referenced by operator<<(), and WriteVariant().
|
inline |
Definition at line 170 of file CArchive.h.
References WriteObject().
Referenced by WriteObject().
|
inline |
Writes a Variant to the stream.
Definition at line 289 of file CArchive.h.
References WriteObject().
Page generated by Doxygen 1.8.14 for MRPT 2.0.1 Git: 0fef1a6d7 Fri Apr 3 23:00:21 2020 +0200 at vie abr 3 23:20:28 CEST 2020 |