|
MRPT
1.9.9
|
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 52 of file CArchive.h.
#include <mrpt/serialization/CArchive.h>

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> | |
| 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) |
|
inline |
Definition at line 55 of file CArchive.h.
|
inlinevirtual |
Definition at line 56 of file CArchive.h.
|
protected |
Read the object.
Definition at line 495 of file CArchive.cpp.
References ReadBuffer(), SERIALIZATION_END_FLAG, THROW_EXCEPTION, THROW_EXCEPTION_FMT, and THROW_TYPED_EXCEPTION.
Referenced by ReadObject(), and ReadVariant().
|
protected |
Read the object Header.
Definition at line 392 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 199 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 192 of file CArchive.cpp.
References WriteObject().
| CArchive & CArchive::operator>> | ( | CSerializable & | obj | ) |
Reads a CSerializable object from the stream.
Definition at line 211 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 205 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 149 of file CArchive.h.
|
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 141 of file CArchive.h.
Referenced by mrpt::maps::CPointsMap::TRenderOptions::readFromStream().
| 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 24 of file CArchive.cpp.
References ASSERT_, read(), and THROW_EXCEPTION.
Referenced by internal_ReadObject(), internal_ReadObjectHeader(), ReadBufferFixEndianness(), receiveMessage(), and mrpt::obs::CObservationVelodyneScan::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 88 of file CArchive.h.
References ReadBuffer(), and mrpt::reverseBytesInPlace().
Referenced by internal_ReadObjectHeader(), mrpt::math::operator>>(), ReadPOD(), and triangle_readFromStream().
|
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 171 of file CArchive.h.
Referenced by operator>>().
|
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>.
| 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 181 of file CArchive.h.
References mrpt::rtti::TRuntimeClassId::createObject(), mrpt::rtti::findRegisteredClass(), 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 538 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 297 of file CArchive.h.
References ReadBufferFixEndianness().
|
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 251 of file CArchive.h.
References mrpt::rtti::TRuntimeClassId::createObject(), mrpt::rtti::findRegisteredClass(), internal_ReadObject(), internal_ReadObjectHeader(), ReadVariant_helper(), and THROW_EXCEPTION_FMT.
Referenced by mrpt::serialization::operator>>().
|
inlineprivate |
Definition at line 213 of file CArchive.h.
Referenced by ReadVariant(), and ReadVariant_helper().
|
inlineprivate |
Definition at line 220 of file CArchive.h.
References IS_CLASS, R, and ReadVariant_helper().
|
inlineprivate |
Definition at line 230 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 620 of file CArchive.cpp.
References mrpt::serialization::CMessage::content, MAKEWORD16B, mrpt::system::os::memcpy(), MRPT_END, MRPT_START, ReadBuffer(), and mrpt::serialization::CMessage::type.
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 586 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 156 of file CArchive.h.
Referenced by mrpt::obs::CObservationCANBusJ1939::serializeTo(), mrpt::poses::CPoses2DSequence::serializeTo(), mrpt::poses::CPoses3DSequence::serializeTo(), mrpt::obs::CActionCollection::serializeTo(), mrpt::opengl::CSetOfObjects::serializeTo(), mrpt::obs::CActionRobotMovement3D::serializeTo(), mrpt::obs::CActionRobotMovement2D::serializeTo(), mrpt::hmtslam::CHierarchicalMHMap::serializeTo(), mrpt::maps::CSimpleMap::serializeTo(), mrpt::obs::CSensoryFrame::serializeTo(), mrpt::obs::CRawlog::serializeTo(), mrpt::maps::CMultiMetricMapPDF::serializeTo(), mrpt::obs::CObservationVelodyneScan::serializeTo(), and mrpt::obs::gnss::gnss_message::writeToStream().
Writes a block of bytes to the stream from Buffer.
| std::exception | On any error |
Definition at line 48 of file CArchive.cpp.
References ASSERT_, THROW_EXCEPTION, and write().
Referenced by mrpt::obs::gnss::Message_NV_OEM6_GENERIC_FRAME::internal_writeToStream(), mrpt::obs::gnss::Message_NV_OEM6_GENERIC_SHORT_FRAME::internal_writeToStream(), mrpt::obs::gnss::Message_NV_OEM6_RANGECMP::internal_writeToStream(), mrpt::obs::gnss::Message_NV_OEM6_VERSION::internal_writeToStream(), mrpt::serialization::operator<<(), sendMessage(), mrpt::math::CMatrixB::serializeTo(), mrpt::obs::CObservationCANBusJ1939::serializeTo(), mrpt::nav::CLogFileRecord::serializeTo(), mrpt::maps::CGasConcentrationGridMap2D::serializeTo(), mrpt::serialization::CMemoryChunkBase< Derived >::serializeTo(), mrpt::maps::CWirelessPowerGridMap2D::serializeTo(), mrpt::maps::CHeightGridMap2D_MRF::serializeTo(), mrpt::maps::CReflectivityGridMap2D::serializeTo(), mrpt::obs::CObservation2DRangeScan::serializeTo(), mrpt::maps::COccupancyGridMap2D::serializeTo(), mrpt::obs::CObservationVelodyneScan::serializeTo(), mrpt::maps::CRandomFieldGridMap3D::serializeTo(), mrpt::img::CImage::serializeTo(), WriteBufferFixEndianness(), WriteObject(), and mrpt::opengl::CRenderizable::writeToStreamRender().
|
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: |
| std::exception | On any error |
Definition at line 127 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().
| void CArchive::WriteObject | ( | const CSerializable * | o | ) |
Writes an object to the stream.
Definition at line 154 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 mrpt::math::operator<<(), operator<<(), and WriteVariant().
|
inline |
|
inline |
Writes a Variant to the stream.
Definition at line 283 of file CArchive.h.
References WriteObject().
| Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 7d5e6d718 Fri Aug 24 01:51:28 2018 +0200 at lun nov 2 08:35:50 CET 2020 |