#ifndef TIME_HPP_GFC1AX6E #define TIME_HPP_GFC1AX6E #include #include #include namespace vanetza { namespace units { namespace si = boost::units::si; typedef boost::units::quantity Duration; /** * Convert a Boost.Units duration to a std::chrono::duration * \tparam U unit type * \tparam T value type * \param duration Boost.Units based duration * \return std::chrono::duration representative of duration */ template Clock::duration clock_cast(const boost::units::quantity& duration) { using chrono_type = std::chrono::duration; const Duration quantity { duration }; const chrono_type chrono_duration { quantity / si::seconds }; return std::chrono::duration_cast(chrono_duration); } /** * Convert std::chrono::duration to a Boost.Units quantity * \tparam T type representing ticks * \tparam P tick period type * \param duration std::chrono::duration based duration * \return Boost.Units quantity representing duration */ template Duration clock_cast(const std::chrono::duration& duration) { using chrono_type = std::chrono::duration; const auto value = std::chrono::duration_cast(duration); return value.count() * si::seconds; } } // namespace units } // namespace vanetza #endif /* TIME_HPP_GFC1AX6E */