- discard_block() : _rng(), _n(0) { }
- explicit discard_block(const base_type & rng) : _rng(rng), _n(0) { }
- template<class T> explicit discard_block(T s) : _rng(s), _n(0) {}
- template<class It> discard_block(It& first, It last)
- : _rng(first, last), _n(0) { }
- void seed() { _rng.seed(); _n = 0; }
- template<class T> void seed(T s) { _rng.seed(s); _n = 0; }
- template<class It> void seed(It& first, It last)
- { _n = 0; _rng.seed(first, last); }
-
- const base_type& base() const { return _rng; }
-
- result_type operator()()
- {
- if(_n >= returned_block) {
- // discard values of random number generator
- for( ; _n < total_block; ++_n)
- _rng();
- _n = 0;
+ /**
+ * Creates a new \discard_block_engine and seeds the underlying
+ * generator with @c value
+ */
+ BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(discard_block_engine,
+ seed_type, value)
+ { _rng.seed(value); _n = 0; }
+
+ /**
+ * Creates a new \discard_block_engine and seeds the underlying
+ * generator with @c seq
+ */
+ BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(discard_block_engine, SeedSeq, seq)
+ { _rng.seed(seq); _n = 0; }
+
+ /**
+ * Creates a new \discard_block_engine and seeds the underlying
+ * generator with first and last.
+ */
+ template<class It> discard_block_engine(It& first, It last)
+ : _rng(first, last), _n(0) { }
+
+ /** default seeds the underlying generator. */
+ void seed() { _rng.seed(); _n = 0; }
+ /** Seeds the underlying generator with s. */
+ BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(discard_block_engine, seed_type, s)
+ { _rng.seed(s); _n = 0; }
+ /** Seeds the underlying generator with seq. */
+ BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(discard_block_engine, SeedSeq, seq)
+ { _rng.seed(seq); _n = 0; }
+ /** Seeds the underlying generator with first and last. */
+ template<class It> void seed(It& first, It last)
+ { _rng.seed(first, last); _n = 0; }
+
+ /** Returns the underlying engine. */
+ const base_type& base() const { return _rng; }
+
+ /** Returns the next value of the generator. */
+ result_type operator()()
+ {
+ if(_n >= returned_block) {
+ // discard values of random number generator
+ // Don't use discard, since we still need to
+ // be somewhat compatible with TR1.
+ // _rng.discard(total_block - _n);
+ for(std::size_t i = 0; i < total_block - _n; ++i) {
+ _rng();
+ }
+ _n = 0;
+ }
+ ++_n;
+ return _rng();