1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
#ifndef INCLUDED_ITERATOR_H_
#define INCLUDED_ITERATOR_H_
// needs the Promise header (generatorpromise.h)
template <typename T>
class Iterator;
template<typename T>
bool operator==(Iterator<T> const &it, Sentinel) noexcept;
template<typename T>
class Iterator
{
friend bool operator==<>(Iterator<T> const &it, Sentinel) noexcept;
using Handle = std::coroutine_handle<Promise<T>>;
Handle d_coHandle = 0;
public:
Iterator() noexcept = default;
explicit Iterator(Handle handle) noexcept;
// Need the post-increment operator for the 'Range' concept.
void operator++(int);
Iterator &operator++();
typename Promise<T>::Reference operator*() const noexcept;
typename Promise<T>::Value *operator->() const noexcept;
};
#include "iterator.imp"
#endif
|