Vanetza
Loading...
Searching...
No Matches
time.hpp
1#ifndef TIME_HPP_GFC1AX6E
2#define TIME_HPP_GFC1AX6E
3
4#include <vanetza/common/clock.hpp>
5#include <boost/units/quantity.hpp>
6#include <boost/units/systems/si/time.hpp>
7
8namespace vanetza
9{
10namespace units
11{
12
13namespace si = boost::units::si;
14typedef boost::units::quantity<boost::units::si::time> Duration;
15
16/**
17 * Convert a Boost.Units duration to a std::chrono::duration
18 * \tparam U unit type
19 * \tparam T value type
20 * \param duration Boost.Units based duration
21 * \return std::chrono::duration representative of duration
22 */
23template<typename U, typename T>
24Clock::duration clock_cast(const boost::units::quantity<U, T>& duration)
25{
26 using chrono_type = std::chrono::duration<Duration::value_type>;
27 const Duration quantity { duration };
28 const chrono_type chrono_duration { quantity / si::seconds };
29 return std::chrono::duration_cast<Clock::duration>(chrono_duration);
30}
31
32/**
33 * Convert std::chrono::duration to a Boost.Units quantity
34 * \tparam T type representing ticks
35 * \tparam P tick period type
36 * \param duration std::chrono::duration based duration
37 * \return Boost.Units quantity representing duration
38 */
39template<class T, class P>
40Duration clock_cast(const std::chrono::duration<T, P>& duration)
41{
42 using chrono_type = std::chrono::duration<Duration::value_type>;
43 const auto value = std::chrono::duration_cast<chrono_type>(duration);
44 return value.count() * si::seconds;
45}
46
47} // namespace units
48} // namespace vanetza
49
50#endif /* TIME_HPP_GFC1AX6E */
ChunckPacket is a packet consisting of several memory chunks.
ByteBufferConvertible & operator[](OsiLayer ol)
ChunkPacket & merge(ChunkPacket &packet, OsiLayer from, OsiLayer to)
std::size_t size() const
const ByteBufferConvertible & layer(OsiLayer ol) const
const ByteBufferConvertible & operator[](OsiLayer ol) const
ByteBufferConvertible & layer(OsiLayer ol)
std::size_t size(OsiLayer from, OsiLayer to) const
ChunkPacket extract(OsiLayer from, OsiLayer to)
std::size_t size(OsiLayer from, OsiLayer to) const
buffer_const_range operator[](OsiLayer layer) const
std::size_t size() const
void set_boundary(OsiLayer, unsigned bytes)
const ByteBuffer & buffer() const
CohesivePacket(const ByteBuffer &buffer, OsiLayer layer)
void trim(OsiLayer from, unsigned bytes)
std::size_t size(OsiLayer single_layer) const
value_type operator[](size_type) const
Definition byte_view.cpp:48
byte_view_range(ByteBuffer &&)
Definition byte_view.cpp:37
byte_view_range(const ByteBuffer::const_iterator &, const ByteBuffer::const_iterator &)
Definition byte_view.cpp:27
ByteBuffer::const_pointer data() const
Definition byte_view.cpp:42
void encode(units::Duration)
Definition lifetime.cpp:45
units::Duration decode() const
Definition lifetime.cpp:59