1#ifndef GENERATOR_ITERATOR_HPP
2#define GENERATOR_ITERATOR_HPP
16template<typename generator_t, typename = std::void_t<decltype(std::declval<const generator_t>().generate())>>
20 generator_t* generator_;
43 if(generator_->done())
46 value_ = generator_->generate();
55 throw std::out_of_range(
"Iterator out of range!");
57 if(generator_->done())
60 value_ = generator_->generate();
69 throw std::out_of_range(
"Iterator out of range!");
78 throw std::out_of_range(
"Iterator out of range!");
86 return generator_ == that.generator_;
91 return generator_ != that.generator_;
96template<typename generator_t, typename = std::void_t<decltype(std::declval<const generator_t>().generate())>>
103template<typename generator_t, typename = std::void_t<decltype(std::declval<const generator_t>().generate())>>
const gen_iterator_t::value_type & operator*() const
gen_iterator_t(generator_t &generator) noexcept
Iterator to the given generator.
std::input_iterator_tag iterator_category
typename generated_type< generator_t >::type value_type
bool operator==(const gen_iterator_t &that) const noexcept
const gen_iterator_t::value_type * operator->() const
gen_iterator_t() noexcept
Creates a dummy end iterator.
std::ptrdiff_t difference_type
gen_iterator_t & operator++()
bool operator!=(const gen_iterator_t &that) const noexcept
gen_iterator_t< generator_t > begin(generator_t &generator) noexcept
Will return an iterator to the generator.
gen_iterator_t< generator_t > end(const generator_t &) noexcept
Returns a dummy end iterator.