// // iota_iterator.h // stream // // Created by Sam Jaffe on 4/6/23. // #pragma once #include #include namespace stream::ranges { template class iota_iterator : public facade> { public: using sentinal_type = Bound; iota_iterator() = default; iota_iterator(T value, Bound bound) : value_(value), bound_(bound) {} T dereference() const { return value_; } void increment() { ++value_; } bool at_end() const { return value_ == bound_; } // Some weird bug in dependent template instantiation??? bool equal_to(iota_iterator const & other) const { return value_ == other.value_; } std::ptrdiff_t distance_to(iota_iterator const & other) const { return other.value_ - value_; } private: T value_; Bound bound_; }; }