STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
seed_seq Class Reference

Public Types

typedef unsigned int result_type
 

Public Member Functions

 seed_seq ()
 
template<class _Ty >
 seed_seq (initializer_list< _Ty > _Ilist)
 
template<class _InIt >
 seed_seq (_InIt _First, _InIt _Last)
 
template<class _RanIt >
void generate (_RanIt _First, _RanIt _Last) const
 
template<class _OutIt >
void param (_OutIt _Dest) const
 
size_t size () const _NOEXCEPT
 
 seed_seq (const seed_seq &)=delete
 
void operator= (const seed_seq &)=delete
 

Private Member Functions

template<class _InIt >
void _Construct (_InIt _First, _InIt _Last)
 
template<class _RanIt >
void _Generate_unchecked (_RanIt _First, _RanIt _Last) const
 
result_type _Xor27 (result_type _Val) const
 

Private Attributes

vector< result_type_Myvec
 

Member Typedef Documentation

typedef unsigned int seed_seq::result_type

Constructor & Destructor Documentation

seed_seq::seed_seq ( )
inline
212  { // default constructor
213  }
template<class _Ty >
seed_seq::seed_seq ( initializer_list< _Ty >  _Ilist)
inline
217  { // construct from [_First, _Last)
218  _Construct(_Ilist.begin(), _Ilist.end());
219  }
constexpr const _Elem * end() const _NOEXCEPT
Definition: initializer_list:44
constexpr const _Elem * begin() const _NOEXCEPT
Definition: initializer_list:39
void _Construct(_InIt _First, _InIt _Last)
Definition: random:250
template<class _InIt >
seed_seq::seed_seq ( _InIt  _First,
_InIt  _Last 
)
inline
223  { // construct from [_First, _Last)
224  _Construct(_First, _Last);
225  }
void _Construct(_InIt _First, _InIt _Last)
Definition: random:250
_FwdIt _Last
Definition: algorithm:1936
seed_seq::seed_seq ( const seed_seq )
delete

Member Function Documentation

template<class _InIt >
void seed_seq::_Construct ( _InIt  _First,
_InIt  _Last 
)
inlineprivate
251  { // construct from [_First, _Last)
252  for (; _First != _Last; ++_First)
253  _Myvec.push_back((unsigned int)*_First);
254  }
void push_back(const _Ty &_Val)
Definition: vector:945
vector< result_type > _Myvec
Definition: random:311
_FwdIt _Last
Definition: algorithm:1936
template<class _RanIt >
void seed_seq::_Generate_unchecked ( _RanIt  _First,
_RanIt  _Last 
) const
inlineprivate
258  { // generate randomized interval from seeds
259  const size_t _Nx = _Last - _First;
260 
261  if (0 < _Nx)
262  { // finite interval, fill it
263  const size_t _Sx = _Myvec.size();
264  const size_t _Tx = 623 <= _Nx ? 11 : 68 <= _Nx ? 7
265  : 39 <= _Nx ? 5 : 7 <= _Nx ? 3 : (_Nx - 1) / 2;
266  const size_t _Px = (_Nx - _Tx) / 2;
267  const size_t _Qx = _Px + _Tx;
268  const size_t _Mx = _Nx <= _Sx ? _Sx + 1 : _Nx;
269  size_t _Kx;
270 
272  _Mask <<= 1; // build 32-bit mask safely
273  _Mask -= 1;
274 
275  for (_Kx = 0; _Kx < _Nx; ++_Kx)
276  _First[_Kx] = 0x8b8b8b8b;
277  for (_Kx = 0; _Kx < _Mx; ++_Kx)
278  { // scramble and add any vector contributions
279  result_type _R1 = 1664525 * _Xor27(_First[_Kx % _Nx]
280  ^ _First[(_Kx + _Px) % _Nx] ^ _First[(_Kx - 1) % _Nx]);
281  result_type _R2 = (result_type)((_R1 + (_Kx == 0 ? _Sx
282  : _Kx <= _Sx ? _Kx % _Nx + _Myvec[(_Kx - 1) % _Sx]
283  : _Kx % _Nx)) & _Mask);
284 
285  _First[(_Kx + _Px) % _Nx] =
286  (_First[(_Kx + _Px) % _Nx] + _R1) & _Mask;
287  _First[(_Kx + _Qx) % _Nx] =
288  (_First[(_Kx + _Qx) % _Nx] + _R2) & _Mask;
289  _First[_Kx % _Nx] = _R2;
290  }
291  for (; _Kx < _Mx + _Nx; ++_Kx)
292  { // rescramble
293  result_type _R3 = 1566083941 * _Xor27(_First[_Kx % _Nx]
294  + _First[(_Kx + _Px) % _Nx] + _First[(_Kx - 1) % _Nx]);
295  result_type _R4 = (result_type)((_R3 - _Kx % _Nx) & _Mask);
296 
297  _First[(_Kx + _Px) % _Nx] =
298  (_First[(_Kx + _Px) % _Nx] ^ _R3) & _Mask;
299  _First[(_Kx + _Qx) % _Nx] =
300  (_First[(_Kx + _Qx) % _Nx] ^ _R4) & _Mask;
301  _First[_Kx % _Nx] = _R4;
302  }
303  }
304  }
result_type _Xor27(result_type _Val) const
Definition: random:306
size_type size() const _NOEXCEPT
Definition: vector:1708
unsigned int result_type
Definition: random:209
typename iterator_traits< _Iter >::value_type _Iter_value_t
Definition: xutility:649
_CRT_MANAGED_FP_DEPRECATE _In_ unsigned int _Mask
Definition: float.h:235
vector< result_type > _Myvec
Definition: random:311
_FwdIt _Last
Definition: algorithm:1936
result_type seed_seq::_Xor27 ( result_type  _Val) const
inlineprivate
307  { // shift and merge
308  return (_Val ^ (_Val >> 27));
309  }
_FwdIt const _Ty _Val
Definition: algorithm:1938
template<class _RanIt >
void seed_seq::generate ( _RanIt  _First,
_RanIt  _Last 
) const
inline
229  { // generate randomized interval from seeds
230  _DEBUG_RANGE(_First, _Last);
232  }
#define _DEBUG_RANGE(first, last)
Definition: xutility:902
_Iter_t _Unchecked(_Iter_t _Iter)
Definition: iterator:11
void _Generate_unchecked(_RanIt _First, _RanIt _Last) const
Definition: random:257
_FwdIt _Last
Definition: algorithm:1936
void seed_seq::operator= ( const seed_seq )
delete
template<class _OutIt >
void seed_seq::param ( _OutIt  _Dest) const
inline
236  { // copy seeds
238  }
_OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest)
Definition: xutility:2347
unsigned _Dest
Definition: mbstring.h:107
iterator begin() _NOEXCEPT
Definition: vector:1643
iterator end() _NOEXCEPT
Definition: vector:1653
vector< result_type > _Myvec
Definition: random:311
size_t seed_seq::size ( ) const
inline
241  { // get size of seed
242  return (_Myvec.size());
243  }
size_type size() const _NOEXCEPT
Definition: vector:1708
vector< result_type > _Myvec
Definition: random:311

Member Data Documentation

vector<result_type> seed_seq::_Myvec
private

The documentation for this class was generated from the following file: