1#ifndef VALIDITY_RESTRICTION_HPP_LMCUHYLJ
2#define VALIDITY_RESTRICTION_HPP_LMCUHYLJ
4#include <vanetza/common/bit_number.hpp>
5#include <vanetza/security/v2/region.hpp>
6#include <vanetza/security/v2/serialization.hpp>
7#include <boost/variant/variant.hpp>
17using Time32 = uint32_t;
18using Time64 = uint64_t;
28 Sixty_Hour_Blocks = 0x3,
34 Duration(uint16_t raw);
47 return static_cast<Units
>(m_raw >> 13);
56 return m_raw & 0x1FFF;
70size_t get_size(
const Duration&);
72enum class ValidityRestrictionType : uint8_t
75 Time_Start_And_End = 1,
76 Time_Start_And_Duration = 2,
80struct StartAndEndValidity
82 StartAndEndValidity() =
default;
83 StartAndEndValidity(Time32 start, Time32 end);
85 Time32 start_validity;
89struct StartAndDurationValidity
91 StartAndDurationValidity() =
default;
92 StartAndDurationValidity(Time32 start,
Duration);
94 Time32 start_validity;
98using EndValidity = Time32;
100typedef boost::variant<EndValidity, StartAndEndValidity, StartAndDurationValidity, GeographicRegion> ValidityRestriction;
106ValidityRestrictionType get_type(
const ValidityRestriction&);
115size_t get_size(
const ValidityRestriction&);
116size_t get_size(
const Time32&);
117size_t get_size(
const Time64&);
138template<Val
idityRestrictionType>
144 using type = EndValidity;
162 using type = GeographicRegion;
172template<Val
idityRestrictionType T>
std::chrono::seconds to_seconds() const