1#ifndef SERIALIZATION_HPP_IENSIAL4
2#define SERIALIZATION_HPP_IENSIAL4
4#include <vanetza/common/serialization.hpp>
5#include <vanetza/security/v2/length_coding.hpp>
16using vanetza::serialize;
17using vanetza::deserialize;
24void serialize_length(OutputArchive&, std::uintmax_t);
31std::uintmax_t deserialize_length(InputArchive&);
44size_t get_size(
const std::list<T>& list)
46 using vanetza::security::v2::get_size;
48 for (
auto& elem : list) {
49 size += get_size(elem);
62std::size_t trim_size(std::uintmax_t in);
71template<
class T,
typename... ARGS>
72void serialize(OutputArchive& ar,
const std::list<T>& list, ARGS&&... args)
74 using vanetza::security::v2::get_size;
75 using vanetza::security::v2::serialize;
76 size_t size = get_size(list);
77 serialize_length(ar, size);
78 for (
auto& elem : list) {
79 serialize(ar, elem, std::forward<ARGS>(args)...);
90template<
class T,
typename... ARGS>
91std::size_t deserialize(InputArchive& ar, std::list<T>& list, ARGS&&... args)
93 using vanetza::security::v2::deserialize;
94 const auto length = trim_size(deserialize_length(ar));
95 std::intmax_t remainder = length;
96 while (remainder > 0) {
98 remainder -= deserialize(ar, t, std::forward<ARGS>(args)...);
99 list.push_back(std::move(t));
101 assert(remainder == 0);