Vanetza
Loading...
Searching...
No Matches
header_variant.hpp
1#ifndef HEADER_VARIANT_HPP
2#define HEADER_VARIANT_HPP
3
4#include <vanetza/geonet/serialization.hpp>
5#include <vanetza/geonet/beacon_header.hpp>
6#include <vanetza/geonet/gbc_header.hpp>
7#include <vanetza/geonet/shb_header.hpp>
8#include <vanetza/geonet/tsb_header.hpp>
9#include <boost/variant/variant.hpp>
10
11namespace vanetza
12{
13namespace geonet
14{
15
16typedef boost::variant<BeaconHeader, GeoBroadcastHeader, ShbHeader, TsbHeader> HeaderVariant;
17typedef boost::variant<BeaconHeader&, GeoBroadcastHeader&, ShbHeader&, TsbHeader&> HeaderRefVariant;
18typedef boost::variant<const BeaconHeader&, const GeoBroadcastHeader&, const ShbHeader&, const TsbHeader&> HeaderConstRefVariant;
19
20/** \brief get the length of the underlying header type
21 *
22 * \param header the header to get the length from
23 * \return std::size_t
24 *
25 */
26std::size_t get_length(const HeaderVariant& header);
27std::size_t get_length(const HeaderRefVariant& header);
28std::size_t get_length(const HeaderConstRefVariant& header);
29
30} // namespace geonet
31} // namespace vanetza
32
33namespace boost
34{
35
36/** \brief serialize the underlying header type to an OutputArchive
37 *
38 * \param header the header to serialize
39 * \param ar the archive to write to
40 *
41 */
42void serialize(const vanetza::geonet::HeaderVariant& header, vanetza::OutputArchive& ar);
43void serialize(const vanetza::geonet::HeaderRefVariant& header, vanetza::OutputArchive& ar);
44void serialize(const vanetza::geonet::HeaderConstRefVariant& header, vanetza::OutputArchive& ar);
45
46} // namespace boost
47
48#endif // HEADER_VARIANT_HPP