Vanetza
 
Loading...
Searching...
No Matches
header_variant.cpp
1#include <vanetza/geonet/header_variant.hpp>
2
3namespace boost
4{
5
6using namespace vanetza::geonet;
7
8class HeaderVariantVisitor : public boost::static_visitor<>
9{
10public:
11 HeaderVariantVisitor(OutputArchive& ar) :
12 m_archive(ar)
13 {
14 }
15
16 template<typename T>
17 void operator()(const T& header)
18 {
19 serialize(header, m_archive);
20 }
21
22private:
23 OutputArchive& m_archive;
24};
25
26void serialize(const HeaderVariant& header, OutputArchive& ar)
27{
28 HeaderVariantVisitor visit(ar);
29 boost::apply_visitor(visit, header);
30}
31
32void serialize(const HeaderRefVariant& header, OutputArchive& ar)
33{
34 HeaderVariantVisitor visitor(ar);
35 boost::apply_visitor(visitor, header);
36}
37
38void serialize(const HeaderConstRefVariant& header, OutputArchive& ar)
39{
40 HeaderVariantVisitor visitor(ar);
41 boost::apply_visitor(visitor, header);
42}
43
44} // namespace boost
45
46
47namespace vanetza
48{
49namespace geonet
50{
51
52class HeaderVariantLengthVisitor : public boost::static_visitor<std::size_t>
53{
54public:
55 template<typename T>
56 std::size_t operator()(const T& header)
57 {
58 return T::length_bytes;
59 }
60};
61
62std::size_t get_length(const HeaderVariant& header)
63{
64 HeaderVariantLengthVisitor visit;
65 return boost::apply_visitor(visit, header);
66}
67
68std::size_t get_length(const HeaderRefVariant& header)
69{
70 HeaderVariantLengthVisitor visitor;
71 return boost::apply_visitor(visitor, header);
72}
73
74std::size_t get_length(const HeaderConstRefVariant& header)
75{
76 HeaderVariantLengthVisitor visitor;
77 return boost::apply_visitor(visitor, header);
78}
79
80} // namespace geonet
81} // namespace vanetza