1#ifndef GENERATOR_ANYGENERATOR_HPP
2#define GENERATOR_ANYGENERATOR_HPP
15 template<
typename generator>
28 base_ = that.base_->clone();
36 return base_->generate();
53 virtual ~base() =
default;
54 virtual std::unique_ptr<base> clone()
const = 0;
55 virtual T generate()
const = 0;
56 virtual bool done() const noexcept = 0;
57 virtual
void next() = 0;
61 class derived : public base
64 explicit derived(
generator gen) : generator_{
std::move(gen)}
68 std::unique_ptr<base> clone()
const override
70 return std::unique_ptr<base>(
new derived{generator_});
73 T generate()
const override
75 return generator_.generate();
78 bool done() const noexcept
override
80 return generator_.done();
92 std::unique_ptr<base> base_;
any_generator & operator=(any_generator &&)=default
any_generator(const any_generator &that)
any_generator(generator gen)
bool done() const noexcept
any_generator & operator=(const any_generator &that)
any_generator(any_generator &&)=default
utfchar32_t next(octet_iterator &it, octet_iterator end)