Vanetza
 
Loading...
Searching...
No Matches
lifetime.hpp
1#ifndef LIFETIME_HPP_XYTSNW3J
2#define LIFETIME_HPP_XYTSNW3J
3
4#include <vanetza/common/bit_number.hpp>
5#include <vanetza/geonet/serialization.hpp>
6#include <vanetza/units/time.hpp>
7#include <boost/operators.hpp>
8#include <cstdint>
9
10namespace vanetza
11{
12namespace geonet
13{
14
15class Lifetime : public boost::totally_ordered<Lifetime>
16{
17public:
18 static constexpr uint8_t multiplier_mask = 0xFC;
19 static constexpr uint8_t base_mask = 0x03;
20
21 enum class Base {
22 Fifty_Milliseconds = 0,
23 One_Second = 1,
24 Ten_Seconds = 2,
25 Hundred_Seconds = 3
26 };
27
28 static const Lifetime zero();
29
30 Lifetime();
31 Lifetime(Base base, BitNumber<uint8_t, 6> multiplier);
32 void set(Base base, BitNumber<uint8_t, 6> multiplier);
33 uint8_t raw() const { return m_lifetime; }
34 void raw(uint8_t raw) { m_lifetime = raw; }
35
36 bool operator<(const Lifetime&) const;
37 bool operator==(const Lifetime&) const;
38
39 /**
40 * Decodes stored lifetime
41 * \return lifetime as duration quantity
42 */
43 units::Duration decode() const;
44
45 /**
46 * Encode duration in lifetime object
47 * \note Precision loss might occur
48 * \param duration Lifetime duration
49 */
50 void encode(units::Duration);
51
52private:
53 uint8_t m_lifetime;
54};
55
56void serialize(const Lifetime&, OutputArchive&);
57void deserialize(Lifetime&, InputArchive&);
58
59} // namespace geonet
60} // namespace vanetza
61
62#endif /* LIFETIME_HPP_XYTSNW3J */
63
void encode(units::Duration)
Definition: lifetime.cpp:45
units::Duration decode() const
Definition: lifetime.cpp:59