iterator_for.hpp 662 Bytes
Newer Older
Paul's avatar
Paul committed
1
2
3
4
5
#ifndef MIGRAPH_GUARD_RTGLIB_ITERATOR_FOR_HPP
#define MIGRAPH_GUARD_RTGLIB_ITERATOR_FOR_HPP

namespace migraph {

Paul's avatar
Paul committed
6
7
8
template <class T>
struct iterator_for_range
{
Paul's avatar
Paul committed
9
10
11
    T* base;
    using base_iterator = decltype(base->begin());

Paul's avatar
Paul committed
12
13
    struct iterator
    {
Paul's avatar
Paul committed
14
        base_iterator i;
Paul's avatar
Paul committed
15
16
17
        base_iterator operator*() { return i; }
        base_iterator operator++() { return ++i; }
        bool operator!=(const iterator& rhs) { return i != rhs.i; }
Paul's avatar
Paul committed
18
19
20
21
22
23
    };

    iterator begin() { return {base->begin()}; }
    iterator end() { return {base->end()}; }
};
template <class T>
Paul's avatar
Paul committed
24
iterator_for_range<T> iterator_for(T& x)
Paul's avatar
Paul committed
25
26
27
28
29
30
31
{
    return {&x};
}

} // namespace migraph

#endif