File: iterator.h

package info (click to toggle)
c%2B%2B-annotations 12.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 13,044 kB
  • sloc: cpp: 24,337; makefile: 1,517; ansic: 165; sh: 121; perl: 90
file content (35 lines) | stat: -rw-r--r-- 830 bytes parent folder | download | duplicates (2)
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