From 2840b5f25d8444f2e8b2d53efad2421b046b9fee Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 7 Nov 2021 12:30:10 +0100 Subject: [PATCH] - added reverse iterators to tarray.h --- source/common/utility/tarray.h | 122 ++++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 1 deletion(-) diff --git a/source/common/utility/tarray.h b/source/common/utility/tarray.h index d44b7b6fb..fc8b2421c 100644 --- a/source/common/utility/tarray.h +++ b/source/common/utility/tarray.h @@ -105,6 +105,16 @@ protected: T* m_ptr; }; +// magic little helper. :) +template +class backwards +{ + T& _obj; +public: + backwards(T &obj) : _obj(obj) {} + auto begin() {return _obj.rbegin();} + auto end() {return _obj.rend();} +}; // TArray ------------------------------------------------------------------- @@ -126,6 +136,8 @@ public: typedef TIterator iterator; typedef TIterator const_iterator; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; typedef T value_type; iterator begin() @@ -154,7 +166,32 @@ public: return &Array[Count]; } - + reverse_iterator rbegin() + { + return reverse_iterator(end()); + } + const_reverse_iterator rbegin() const + { + return const_reverse_iterator(end()); + } + const_reverse_iterator crbegin() const + { + return const_reverse_iterator(cend()); + } + + reverse_iterator rend() + { + return reverse_iterator(begin()); + } + const_reverse_iterator rend() const + { + return const_reverse_iterator(begin()); + } + const_reverse_iterator crend() const + { + return const_reverse_iterator(cbegin()); + } + //////// // This is a dummy constructor that does nothing. The purpose of this @@ -637,6 +674,8 @@ public: typedef TIterator iterator; typedef TIterator const_iterator; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; typedef T value_type; iterator begin() @@ -665,6 +704,32 @@ public: return &Array[Count]; } + reverse_iterator rbegin() + { + return reverse_iterator(end()); + } + const_reverse_iterator rbegin() const + { + return const_reverse_iterator(end()); + } + const_reverse_iterator crbegin() const + { + return const_reverse_iterator(cend()); + } + + reverse_iterator rend() + { + return reverse_iterator(begin()); + } + const_reverse_iterator rend() const + { + return const_reverse_iterator(begin()); + } + const_reverse_iterator crend() const + { + return const_reverse_iterator(cbegin()); + } + void Init(T *ptr, unsigned cnt) { Array = ptr; @@ -1705,6 +1770,8 @@ public: typedef TIterator iterator; typedef TIterator const_iterator; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; typedef T value_type; iterator begin() @@ -1733,6 +1800,32 @@ public: return &Array[Count]; } + reverse_iterator rbegin() + { + return reverse_iterator(end()); + } + const_reverse_iterator rbegin() const + { + return const_reverse_iterator(end()); + } + const_reverse_iterator crbegin() const + { + return const_reverse_iterator(cend()); + } + + reverse_iterator rend() + { + return reverse_iterator(begin()); + } + const_reverse_iterator rend() const + { + return const_reverse_iterator(begin()); + } + const_reverse_iterator crend() const + { + return const_reverse_iterator(cbegin()); + } + //////// TArrayView() = default; // intended to keep this type trivial. @@ -1862,6 +1955,8 @@ public: typedef TSparseIterator iterator; typedef TSparseIterator const_iterator; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; typedef T value_type; iterator begin() @@ -1890,6 +1985,31 @@ public: return const_iterator(Array + Count * Stride, Stride); } + reverse_iterator rbegin() + { + return reverse_iterator(end()); + } + const_reverse_iterator rbegin() const + { + return const_reverse_iterator(end()); + } + const_reverse_iterator crbegin() const + { + return const_reverse_iterator(cend()); + } + + reverse_iterator rend() + { + return reverse_iterator(begin()); + } + const_reverse_iterator rend() const + { + return const_reverse_iterator(begin()); + } + const_reverse_iterator crend() const + { + return const_reverse_iterator(cbegin()); + } //////// TSparseArrayView() = default; // intended to keep this type trivial.