From: Benjamin Kramer Date: Sun, 15 Mar 2015 18:47:26 +0000 (+0000) Subject: SimpleArray: Provide reverse iteration via std::reverse_iterator. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed39561e8287598e50b78381192727a710f4f093;p=clang SimpleArray: Provide reverse iteration via std::reverse_iterator. NFC intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232330 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/Analyses/ThreadSafetyUtil.h b/include/clang/Analysis/Analyses/ThreadSafetyUtil.h index 42808a80ec..4d3402f8c0 100644 --- a/include/clang/Analysis/Analyses/ThreadSafetyUtil.h +++ b/include/clang/Analysis/Analyses/ThreadSafetyUtil.h @@ -130,6 +130,8 @@ public: typedef T *iterator; typedef const T *const_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; size_t size() const { return Size; } size_t capacity() const { return Capacity; } @@ -160,6 +162,16 @@ public: const_iterator cbegin() const { return Data; } const_iterator cend() const { return Data + Size; } + reverse_iterator rbegin() { return reverse_iterator(end()); } + reverse_iterator rend() { return reverse_iterator(begin()); } + + const_reverse_iterator rbegin() const { + return const_reverse_iterator(end()); + } + const_reverse_iterator rend() const { + return const_reverse_iterator(begin()); + } + void push_back(const T &Elem) { assert(Size < Capacity); Data[Size++] = Elem; @@ -188,36 +200,12 @@ public: return J - Osz; } - // An adaptor to reverse a simple array - class ReverseAdaptor { - public: - ReverseAdaptor(SimpleArray &Array) : Array(Array) {} - // A reverse iterator used by the reverse adaptor - class Iterator { - public: - Iterator(T *Data) : Data(Data) {} - T &operator*() { return *Data; } - const T &operator*() const { return *Data; } - Iterator &operator++() { - --Data; - return *this; - } - bool operator!=(Iterator Other) { return Data != Other.Data; } - - private: - T *Data; - }; - Iterator begin() { return Array.end() - 1; } - Iterator end() { return Array.begin() - 1; } - const Iterator begin() const { return Array.end() - 1; } - const Iterator end() const { return Array.begin() - 1; } - - private: - SimpleArray &Array; - }; - - const ReverseAdaptor reverse() const { return ReverseAdaptor(*this); } - ReverseAdaptor reverse() { return ReverseAdaptor(*this); } + llvm::iterator_range reverse() { + return llvm::make_range(rbegin(), rend()); + } + llvm::iterator_range reverse() const { + return llvm::make_range(rbegin(), rend()); + } private: // std::max is annoying here, because it requires a reference,