namespace mrpt::serialization

namespace serialization {

// namespaces

namespace mrpt::serialization::detail;
namespace mrpt::serialization::internal;
namespace mrpt::serialization::metaprogramming;

// typedefs

typedef std::disjunction<std::is_same<T, Ts>...> is_any;
typedef is_any<T, bool, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double> is_simple_type;
typedef std::is_same<typename T::value_type, std::pair<const typename T::key_type, typename T::mapped_type>> is_map_like;
typedef std::is_same<T, typename std::map<typename T::key_type, typename T::mapped_type, typename T::key_compare, typename T::allocator_type>> is_map;
typedef std::is_same<T, typename std::multimap<typename T::key_type, typename T::mapped_type, typename T::key_compare, typename T::allocator_type>> is_multimap;

// classes

class CArchive;

template <>
class CArchiveStreamBase<std::istream>;

template <>
class CArchiveStreamBase<std::ostream>;

template <>
class CArchiveStreamBase<std::iostream>;

template <>
class CArchiveStreamBase<std::vector<uint8_t>>;

template <class STREAM>
class CArchiveStreamBase;

template <>
class CArchiveStreamBase<const std::vector<uint8_t>>;

class CExceptionEOF;
class CMessage;

template <typename SCHEME_CAPABLE>
class CSchemeArchive;

class CSchemeArchiveBase;
class CSchemeArchiveBase_impl;
class CSerializable;

// global functions

CArchive& operator >> (
    CArchive& s,
    mrpt::aligned_std_vector<float>& a
    );

CArchive& operator << (
    CArchive& s,
    const mrpt::aligned_std_vector<float>& a
    );

CArchive& operator >> (
    CArchive& s,
    std::vector<float>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<float>& a
    );

template <typename T, std::enable_if_t<is_simple_type<T>::value, int> = 0>
CArchive& operator << (
    CArchive& out,
    const T& a
    );

template <typename T, std::enable_if_t<is_simple_type<T>::value, int> = 0>
CArchive& operator >> (
    CArchive& in,
    T& a
    );

CArchive& operator << (
    CArchive& out,
    const mrpt::Clock::time_point& a
    );

CArchive& operator >> (
    CArchive& in,
    mrpt::Clock::time_point& a
    );

CArchive& operator << (
    CArchive& s,
    const std::string& str
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<int32_t>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<uint32_t>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<uint16_t>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<int16_t>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<int64_t>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<uint8_t>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<int8_t>& a
    );

CArchive& operator << (
    CArchive& out,
    const std::vector<bool>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<std::string>& vec
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<size_t>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::string& str
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<int32_t>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<uint32_t>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<uint16_t>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<int16_t>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<int64_t>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<uint8_t>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<int8_t>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<bool>& a
    );

CArchive& operator >> (
    CArchive& in,
    std::vector<std::string>& a
    );

CArchive& operator >> (
    CArchive& s,
    std::vector<double>& a
    );

CArchive& operator << (
    CArchive& s,
    const std::vector<double>& a
    );

CArchive& operator >> (
    CArchive& s,
    std::vector<size_t>& a
    );

template <
    typename T,
    std::enable_if_t<std::is_base_of_v<mrpt::serialization::CSerializable, T>>* = nullptr
    >
CArchive& operator >> (
    CArchive& in,
    typename std::shared_ptr<T>& pObj
    );

template <typename... T>
CArchive& operator >> (
    CArchive& in,
    typename std::variant<T...>& pObj
    );

template <typename... T>
CArchive& operator << (
    CArchive& out,
    const typename std::variant<T...>& pObj
    );

template <
    class T,
    std::enable_if_t<!std::is_base_of_v<mrpt::serialization::CSerializable, T>>* = nullptr
    >
CArchive& operator << (
    CArchive& out,
    const std::shared_ptr<T>& pObj
    );

template <class STREAM>
CArchiveStreamBase<STREAM> archiveFrom(STREAM& s);

template <class STREAM>
CArchive::Ptr archivePtrFrom(STREAM& s);

template <class STREAM>
CArchive::UniquePtr archiveUniquePtrFrom(STREAM& s);

CSchemeArchiveBase archiveJSON();

std::ostream& operator << (
    std::ostream& out,
    const CSchemeArchiveBase& a
    );

std::istream& operator >> (
    std::istream& in,
    CSchemeArchiveBase& a
    );

void ObjectToOctetVector(const CSerializable* o, std::vector<uint8_t>& out_vector);
void OctetVectorToObject(const std::vector<uint8_t>& in_data, CSerializable::Ptr& obj);

template <class T>
CArchive& operator << (CArchive& out, const std::optional<T>& obj);

template <class T>
CArchive& operator >> (CArchive& in, std::optional<T>& obj);

template <typename T, std::enable_if_t<is_map<T>::value, int> = 0>
std::string containerName();

template <class T, size_t N>
CArchive& operator << (CArchive& out, const std::array<T, N>& obj);

template <class T, size_t N>
CArchive& operator >> (CArchive& in, std::array<T, N>& obj);

template <class T1, class T2>
CArchive& operator << (CArchive& out, const std::pair<T1, T2>& obj);

template <class T1, class T2>
CArchive& operator >> (CArchive& in, std::pair<T1, T2>& obj);

template <typename ZMQ_SOCKET_TYPE>
void mrpt_send_to_zmq(
    ZMQ_SOCKET_TYPE zmq_socket,
    const mrpt::serialization::CSerializable& obj,
    const size_t max_packet_len = 0
    );

template <typename ZMQ_SOCKET_TYPE, typename VECTOR_MSG_T>
bool mrpt_recv_from_zmq_buf(
    ZMQ_SOCKET_TYPE zmq_socket,
    VECTOR_MSG_T& out_lst_msgs,
    mrpt::io::CMemoryStream& target_buf,
    bool dont_wait,
    size_t* rx_obj_length_in_bytes
    );

template <typename ZMQ_SOCKET_TYPE>
mrpt::serialization::CSerializable::Ptr mrpt_recv_from_zmq(
    ZMQ_SOCKET_TYPE zmq_socket,
    bool dont_wait = false,
    size_t* rx_obj_length_in_bytes = nullptr
    );

template <typename ZMQ_SOCKET_TYPE>
bool mrpt_recv_from_zmq_into(
    ZMQ_SOCKET_TYPE zmq_socket,
    mrpt::serialization::CSerializable& target_object,
    bool dont_wait = false,
    size_t* rx_obj_length_in_bytes = nullptr
    );

} // namespace serialization

Global Functions

template <
    typename T,
    std::enable_if_t<std::is_base_of_v<mrpt::serialization::CSerializable, T>>* = nullptr
    >
CArchive& operator >> (
    CArchive& in,
    typename std::shared_ptr<T>& pObj
    )

Read a smart pointer to a non-CSerializable (POD,…) data type.

template <
    class T,
    std::enable_if_t<!std::is_base_of_v<mrpt::serialization::CSerializable, T>>* = nullptr
    >
CArchive& operator << (
    CArchive& out,
    const std::shared_ptr<T>& pObj
    )

Write a shared_ptr to a non-CSerializable object.

template <class STREAM>
CArchiveStreamBase<STREAM> archiveFrom(STREAM& s)

Helper function to create a templatized wrapper CArchive object for a: MRPT’s CStream, std::istream, std::ostream, std::stringstream.

Use with std::{.*}stream requires including <mrpt/serialization/archiveFrom_std_streams.h> and explicitly specifying the template parameter like: archiveFrom<std::istream> or archiveFrom<std::ostream>.

See also:

[mrpt-serialization], and example serialization_stl/test.cpp

template <class STREAM>
CArchive::Ptr archivePtrFrom(STREAM& s)

Like archiveFrom(), returning a shared_ptr<>.

template <class STREAM>
CArchive::UniquePtr archiveUniquePtrFrom(STREAM& s)

Like archiveFrom(), returning a unique_ptr<>.