[rand.adapt.disc] (original) (raw)

29 Numerics library [numerics]

29.5 Random number generation [rand]

29.5.5 Random number engine adaptor class templates [rand.adapt]

29.5.5.2 Class template discard_block_engine [rand.adapt.disc]

A discard_block_engine random number engine adaptor produces random numbers selected from those produced by some base engine e.

The state xof a discard_block_engine engine adaptor object xconsists of the state e of its base engine eand an additional integer n.

The size of the state is the size of e's state plus 1.

The transition algorithm discards all but values from each block of p ≥ r values delivered by e.

The state transition is performed as follows: If n ≥ r, advance the state of e from e to e and set n to 0.

In any case, then increment n and advance e's then-current state e to e.

The generation algorithm yields the value returned by the last invocation of e() while advancing e's state as described above.

namespace std { template<class Engine, size_t p, size_t r> class discard_block_engine { public: using result_type = typename Engine::result_type;static constexpr size_t block_size = p;static constexpr size_t used_block = r;static constexpr result_type min() { return Engine::min(); } static constexpr result_type max() { return Engine::max(); } discard_block_engine();explicit discard_block_engine(const Engine& e);explicit discard_block_engine(Engine&& e);explicit discard_block_engine(result_type s);template<class Sseq> explicit discard_block_engine(Sseq& q);void seed();void seed(result_type s);template<class Sseq> void seed(Sseq& q);friend bool operator==(const discard_block_engine& x, const discard_block_engine& y); result_type operator()();void discard(unsigned long long z);const Engine& base() const noexcept { return e; } template<class charT, class traits> friend basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const discard_block_engine& x); template<class charT, class traits> friend basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>& is, discard_block_engine& x); private: Engine e; size_t n; };}

The following relations shall hold:0 < randr <= p.

The textual representation consists of the textual representation of efollowed by the value of n.

In addition to its behavior pursuant to subclause [rand.req.adapt], each constructorthat is not a copy constructor sets n to 0.