13#ifndef CPL_ENUMERATE_H
14#define CPL_ENUMERATE_H
25template <
class T>
class Enumerator
28 using TIter =
decltype(std::begin(std::declval<T &>()));
33 explicit inline iterator(
const TIter &it) : m_iter(it)
37 inline bool operator==(
const iterator &other)
const
39 return m_iter == other.m_iter;
42 inline bool operator!=(
const iterator &other)
const
44 return m_iter != other.m_iter;
47 inline iterator &operator++()
54 inline iterator operator++(
int)
56 iterator before = *
this;
61 inline auto operator*()
const
63 return std::pair<size_t, decltype(*m_iter) &>(m_index, *m_iter);
71 explicit inline Enumerator(T &iterable) : m_iterable(iterable)
75 inline iterator
begin()
const
77 return iterator(std::begin(m_iterable));
80 inline iterator
end()
const
85 return iterator(std::end(m_iterable));
102template <
class T>
inline auto enumerate(T &iterable)
104 return Enumerator<T>(iterable);
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:478
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:486