gnss-sim/3rdparty/boost/uuid/time_generator_v6.hpp

54 lines
1.3 KiB
C++

#ifndef BOOST_UUID_TIME_GENERATOR_V6_HPP_INCLUDED
#define BOOST_UUID_TIME_GENERATOR_V6_HPP_INCLUDED
// Copyright 2024 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/uuid/time_generator_v1.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/detail/endian.hpp>
namespace boost {
namespace uuids {
// time_generator_v6
class time_generator_v6: public time_generator_v1
{
public:
using result_type = uuid;
using time_generator_v1::time_generator_v1;
result_type operator()() noexcept;
};
// operator()
inline time_generator_v6::result_type time_generator_v6::operator()() noexcept
{
uuid result = time_generator_v1::operator()();
std::uint64_t timestamp = result.timestamp_v1();
std::uint32_t time_high = static_cast< std::uint32_t >( timestamp >> 28 );
detail::store_big_u32( result.data + 0, time_high );
std::uint16_t time_mid = static_cast< std::uint16_t >( timestamp >> 12 );
detail::store_big_u16( result.data + 4, time_mid );
std::uint16_t time_low_and_version = static_cast< std::uint16_t >( timestamp & 0xFFF ) | 0x6000;
detail::store_big_u16( result.data + 6, time_low_and_version );
return result;
}
}} // namespace boost::uuids
#endif // BOOST_UUID_TIME_GENERATOR_V1_HPP_INCLUDED