Serialization STL extensions

// typedefs

typedef std::is_same<typename T::value_type, std::pair<const typename T::key_type, typename T::mapped_type>> mrpt::serialization::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>> mrpt::serialization::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>> mrpt::serialization::is_multimap;

// structs

struct mrpt::serialization::metaprogramming::ObjectReadFromStream;

template <typename ptr_t>
struct mrpt::serialization::metaprogramming::ObjectReadFromStreamToPtrs;

struct mrpt::serialization::metaprogramming::ObjectWriteToStream;

// global functions

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

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

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

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

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

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

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

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

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

Global Functions

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

Template method to serialize an associative STL container.

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

Template method to deserialize an associative STL container.

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

Template to serialize a std::optional<T>

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

Template to deserialize a std::optional<T>

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

Template method to serialize a std::array<T,N>

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

Template method to deserialize a std::array<T,N>

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

Template method to serialize a STL pair.

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

Template method to deserialize a STL pair.