// https://www.reedbeta.com/blog/python-like-enumerate-in-cpp17/ // std::vector things; // ... // for (auto [i, thing] : enumerate(things)) // { // .. `i` gets the index and `thing` gets the Thing in each iteration // } #include #include "vtk_ioss_mangle.h" namespace Ioss { template ())), typename value_type = typename std::iterator_traits::value_type, typename = decltype(std::end(std::declval()))> struct iterator { size_t i; TIter iter; bool operator!=(const iterator& other) const { return iter != other.iter; } void operator++() { ++i; ++iter; } auto operator*() -> std::tuple const { return std::tie(i, *iter); } }; template struct iterable_wrapper { T iterable; auto begin() -> iterator { return iterator{ 0, std::begin(iterable) }; } auto end() -> iterator { return iterator{ 0, std::end(iterable) }; } }; template constexpr auto enumerate(T &&iterable) -> iterable_wrapper { return iterable_wrapper{std::forward(iterable)}; } } // namespace Ioss