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 <boost/variant/variant.hpp>
9
10namespace vanetza
11{
12namespace geonet
13{
14
15typedef boost::variant<BeaconHeader, GeoBroadcastHeader, ShbHeader> HeaderVariant;
16typedef boost::variant<BeaconHeader&, GeoBroadcastHeader&, ShbHeader&> HeaderRefVariant;
17typedef boost::variant<const BeaconHeader&, const GeoBroadcastHeader&, const ShbHeader&> HeaderConstRefVariant;
18
19/** \brief get the length of the underlying header type
20 *
21 * \param header the header to get the length from
22 * \return std::size_t
23 *
24 */
25std::size_t get_length(const HeaderVariant& header);
26std::size_t get_length(const HeaderRefVariant& header);
27std::size_t get_length(const HeaderConstRefVariant& header);
28
29} // namespace geonet
30} // namespace vanetza
31
32namespace boost
33{
34
35/** \brief serialize the underlying header type to an OutputArchive
36 *
37 * \param header the header to serialize
38 * \param ar the archive to write to
39 *
40 */
41void serialize(const vanetza::geonet::HeaderVariant& header, vanetza::OutputArchive& ar);
42void serialize(const vanetza::geonet::HeaderRefVariant& header, vanetza::OutputArchive& ar);
43void serialize(const vanetza::geonet::HeaderConstRefVariant& header, vanetza::OutputArchive& ar);
44
45} // namespace boost
46
47#endif // HEADER_VARIANT_HPP