diff --git a/src/util/dlist.h b/src/util/dlist.h index e5c95b8cf..2b76e7bad 100644 --- a/src/util/dlist.h +++ b/src/util/dlist.h @@ -188,14 +188,14 @@ class dll_iterator { dll_iterator(T const* elem, bool first): m_elem(elem), m_first(first) { } public: - static dll_iterator mk_begin(T const* elem) { - // Setting first==(bool)elem makes this also work for elem==nullptr; + static dll_iterator mk_begin(T const* list) { + // Setting first==(bool)list makes this also work for list==nullptr; // but we can't implement top-level begin/end for pointers because it clashes with the definition for arrays. - return {elem, (bool)elem}; + return {list, (bool)list}; } - static dll_iterator mk_end(T const* elem) { - return {elem, false}; + static dll_iterator mk_end(T const* list) { + return {list, false}; } using value_type = T; @@ -226,14 +226,23 @@ public: template < typename T , typename U = std::enable_if_t, T>> // should only match if T actually inherits from dll_base > -dll_iterator begin(T const& elem) { - return dll_iterator::mk_begin(&elem); +dll_iterator begin(T const& list) { + return dll_iterator::mk_begin(&list); } template < typename T , typename U = std::enable_if_t, T>> // should only match if T actually inherits from dll_base > -dll_iterator end(T const& elem) +dll_iterator end(T const& list) { - return dll_iterator::mk_end(&elem); + return dll_iterator::mk_end(&list); } + +template +class dll_elements { + T const* m_list; +public: + dll_elements(T const* list): m_list(list) {} + dll_iterator begin() const { return dll_iterator::mk_begin(m_list); } + dll_iterator end() const { return dll_iterator::mk_end(m_list); } +};