@@ -9,33 +9,72 @@ namespace py {
99
1010namespace detail {
1111
12+ /* *
13+ * @brief
14+ *
15+ * @tparam T
16+ */
1217template <typename T> struct EnumerateIterator {
1318 typedef decltype (std::begin(std::declval<T>())) TIter;
1419 using iter_ref = typename std::iterator_traits<TIter>::reference;
1520
1621 size_t i;
1722 TIter iter;
1823
24+ /* *
25+ * @brief
26+ *
27+ * @param other
28+ * @return true
29+ * @return false
30+ */
1931 auto operator !=(const EnumerateIterator &other) const -> bool {
2032 return iter != other.iter ;
2133 }
2234
35+ /* *
36+ * @brief
37+ *
38+ * @return EnumerateIterator&
39+ */
2340 EnumerateIterator &operator ++() {
2441 ++i;
2542 ++iter;
2643 return *this ;
2744 }
2845
46+ /* *
47+ * @brief
48+ *
49+ * @return std::pair<size_t, iter_ref>
50+ */
2951 auto operator *() -> std::pair<size_t , iter_ref> {
3052 return std::pair<size_t , iter_ref>{i, *iter};
3153 }
3254};
3355
56+ /* *
57+ * @brief
58+ *
59+ * @tparam T
60+ */
3461template <typename T> struct EnumerateIterableWrapper {
3562 T &iterable;
63+
64+ /* *
65+ * @brief
66+ *
67+ * @return EnumerateIterator<T>
68+ */
3669 auto begin () const -> EnumerateIterator<T> {
3770 return EnumerateIterator<T>{0 , std::begin (iterable)};
3871 }
72+
73+ /* *
74+ * @brief
75+ *
76+ * @return EnumerateIterator<T>
77+ */
3978 auto end () const -> EnumerateIterator<T> {
4079 return EnumerateIterator<T>{0 , std::end (iterable)};
4180 }
@@ -47,10 +86,8 @@ template <typename T> struct EnumerateIterableWrapper {
4786 * @brief
4887 *
4988 * @tparam T
50- * @tparam decltype(std::begin(std::declval<T>()))
51- * @tparam decltype(std::end(std::declval<T>()))
5289 * @param[in] iterable
53- * @return constexpr auto
90+ * @return detail::EnumerateIterableWrapper<T>
5491 */
5592template <typename T>
5693inline auto enumerate(T &iterable) -> detail::EnumerateIterableWrapper<T> {
@@ -61,10 +98,8 @@ inline auto enumerate(T &iterable) -> detail::EnumerateIterableWrapper<T> {
6198 * @brief
6299 *
63100 * @tparam T
64- * @tparam decltype(std::begin(std::declval<T>()))
65- * @tparam decltype(std::end(std::declval<T>()))
66- * @param[in] iterable
67- * @return constexpr auto
101+ * @param iterable
102+ * @return detail::EnumerateIterableWrapper<const T>
68103 */
69104template <typename T>
70105inline auto const_enumerate (const T &iterable)
0 commit comments