File indexing completed on 2025-02-22 10:41:29
0001 #pragma once
0002 #include <tuple>
0003
0004 namespace Jug::Utils {
0005
0006
0007
0008
0009
0010 template <typename T, typename TIter = decltype(std::begin(std::declval<T>())),
0011 typename = decltype(std::end(std::declval<T>()))>
0012 constexpr auto Enumerate(T&& iterable)
0013 {
0014 struct iterator
0015 {
0016 size_t i;
0017 TIter iter;
0018 bool operator != (const iterator & other) const { return iter != other.iter; }
0019 void operator ++ () { ++i; ++iter; }
0020 auto operator * () const { return std::tie(i, *iter); }
0021 };
0022 struct iterable_wrapper
0023 {
0024 T iterable;
0025 auto begin() { return iterator{ 0, std::begin(iterable) }; }
0026 auto end() { return iterator{ 0, std::end(iterable) }; }
0027 };
0028 return iterable_wrapper{ std::forward<T>(iterable) };
0029 }
0030
0031 }