diff options
| author | Reid Kleckner <rnk@google.com> | 2016-05-03 20:53:20 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2016-05-03 20:53:20 +0000 |
| commit | 1e4ba37df14924b04186185382cca3276c7fc129 (patch) | |
| tree | 378d8f05f64e72ef6dee7e1a0d37aeda8d672644 | |
| parent | c6b688a81b2d13f47c71aacd35940fb234ee13d5 (diff) | |
| download | bcm5719-llvm-1e4ba37df14924b04186185382cca3276c7fc129.tar.gz bcm5719-llvm-1e4ba37df14924b04186185382cca3276c7fc129.zip | |
[ADT] Add drop_front method to ArrayRef
We have it for StringRef but not ArrayRef, and ArrayRef has drop_back,
so I see no reason it shouldn't have drop_front. Splitting this out of a
change that I have that will use this funcitonality.
llvm-svn: 268434
| -rw-r--r-- | llvm/include/llvm/ADT/ArrayRef.h | 16 | ||||
| -rw-r--r-- | llvm/unittests/ADT/ArrayRefTest.cpp | 7 |
2 files changed, 21 insertions, 2 deletions
diff --git a/llvm/include/llvm/ADT/ArrayRef.h b/llvm/include/llvm/ADT/ArrayRef.h index a801e985d15..014db620715 100644 --- a/llvm/include/llvm/ADT/ArrayRef.h +++ b/llvm/include/llvm/ADT/ArrayRef.h @@ -173,7 +173,13 @@ namespace llvm { return ArrayRef<T>(data()+N, M); } - // \brief Drop the last \p N elements of the array. + /// \brief Drop the first \p N elements of the array. + ArrayRef<T> drop_front(unsigned N = 1) const { + assert(size() >= N && "Dropping more elements than exist"); + return slice(N, size() - N); + } + + /// \brief Drop the last \p N elements of the array. ArrayRef<T> drop_back(unsigned N = 1) const { assert(size() >= N && "Dropping more elements than exist"); return slice(0, size() - N); @@ -285,7 +291,13 @@ namespace llvm { return MutableArrayRef<T>(data()+N, M); } - MutableArrayRef<T> drop_back(unsigned N) const { + /// \brief Drop the first \p N elements of the array. + MutableArrayRef<T> drop_front(unsigned N = 1) const { + assert(this->size() >= N && "Dropping more elements than exist"); + return slice(N, this->size() - N); + } + + MutableArrayRef<T> drop_back(unsigned N = 1) const { assert(this->size() >= N && "Dropping more elements than exist"); return slice(0, this->size() - N); } diff --git a/llvm/unittests/ADT/ArrayRefTest.cpp b/llvm/unittests/ADT/ArrayRefTest.cpp index 6cbadd6bc22..5a1ff785c34 100644 --- a/llvm/unittests/ADT/ArrayRefTest.cpp +++ b/llvm/unittests/ADT/ArrayRefTest.cpp @@ -67,6 +67,13 @@ TEST(ArrayRefTest, DropBack) { EXPECT_TRUE(AR1.drop_back().equals(AR2)); } +TEST(ArrayRefTest, DropFront) { + static const int TheNumbers[] = {4, 8, 15, 16, 23, 42}; + ArrayRef<int> AR1(TheNumbers); + ArrayRef<int> AR2(&TheNumbers[2], AR1.size() - 2); + EXPECT_TRUE(AR1.drop_front(2).equals(AR2)); +} + TEST(ArrayRefTest, Equals) { static const int A1[] = {1, 2, 3, 4, 5, 6, 7, 8}; ArrayRef<int> AR1(A1); |

