2
0
mirror of https://github.com/boostorg/uuid.git synced 2026-01-19 04:42:16 +00:00

Add copy/move constructors/assignment operators to time_generator_v7

This commit is contained in:
Peter Dimov
2024-05-04 13:56:27 +03:00
parent 981fbdc838
commit f7b32f8438
2 changed files with 48 additions and 1 deletions

View File

@@ -121,6 +121,18 @@ public:
state_[ 13 ] = 0;
}
// perturbs the generator state so that it no longer generates
// the same sequence; useful for e.g. moved from objects
void perturb() noexcept
{
index_ = 16;
for( int i = 12; i < 16; ++i )
{
++state_[ i ];
}
}
static constexpr result_type min() noexcept
{
return std::numeric_limits<result_type>::min();

View File

@@ -39,6 +39,12 @@ public:
time_generator_v7();
time_generator_v7( time_generator_v7 const& rhs );
time_generator_v7( time_generator_v7&& rhs ) noexcept;
time_generator_v7& operator=( time_generator_v7 const& rhs );
time_generator_v7& operator=( time_generator_v7&& rhs ) noexcept;
result_type operator()() noexcept;
private:
@@ -46,7 +52,7 @@ private:
static state_type get_new_state( state_type const& oldst ) noexcept;
};
// constructor
// constructors
inline time_generator_v7::time_generator_v7()
{
@@ -54,6 +60,35 @@ inline time_generator_v7::time_generator_v7()
rng_.seed( seeder );
}
inline time_generator_v7::time_generator_v7( time_generator_v7 const& rhs ): state_( rhs.state_ )
{
detail::random_provider seeder;
rng_.seed( seeder );
}
inline time_generator_v7::time_generator_v7( time_generator_v7&& rhs ) noexcept: state_( std::move( rhs.state_ ) ), rng_( std::move( rhs.rng_ ) )
{
rhs.rng_.perturb();
}
// assignment
inline time_generator_v7& time_generator_v7::operator=( time_generator_v7 const& rhs )
{
state_ = rhs.state_;
return *this;
}
inline time_generator_v7& time_generator_v7::operator=( time_generator_v7&& rhs ) noexcept
{
state_ = std::move( rhs.state_ );
rng_ = std::move( rhs.rng_ );
rhs.rng_.perturb();
return *this;
}
// get_new_state
inline time_generator_v7::state_type time_generator_v7::get_new_state( state_type const& oldst ) noexcept