diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-07-05 06:12:30 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-07-05 06:12:30 +0000 |
commit | 45647d8f7458ed2d76252ce25347c2c75e769025 (patch) | |
tree | 96f91cabe9f1046035d2111b61e89fe9f9941104 | |
parent | f994cef83693dcd0eb2c0e1c552fbc2a285488cf (diff) | |
download | bcm5719-llvm-45647d8f7458ed2d76252ce25347c2c75e769025.tar.gz bcm5719-llvm-45647d8f7458ed2d76252ce25347c2c75e769025.zip |
ADT: Add a drop_back() helper to ArrayRef
The slice(N, M) interface is powerful but not concise when wanting to
drop a few elements off of an ArrayRef, fix this by adding a drop_back
method.
llvm-svn: 212370
-rw-r--r-- | llvm/include/llvm/ADT/ArrayRef.h | 6 | ||||
-rw-r--r-- | llvm/unittests/ADT/ArrayRefTest.cpp | 7 |
2 files changed, 13 insertions, 0 deletions
diff --git a/llvm/include/llvm/ADT/ArrayRef.h b/llvm/include/llvm/ADT/ArrayRef.h index 1b64fee9a59..0fff505d8d0 100644 --- a/llvm/include/llvm/ADT/ArrayRef.h +++ b/llvm/include/llvm/ADT/ArrayRef.h @@ -147,6 +147,12 @@ namespace llvm { return ArrayRef<T>(data()+N, M); } + // \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); + } + /// @} /// @name Operator Overloads /// @{ diff --git a/llvm/unittests/ADT/ArrayRefTest.cpp b/llvm/unittests/ADT/ArrayRefTest.cpp index 7133ca79c46..293afc6ea37 100644 --- a/llvm/unittests/ADT/ArrayRefTest.cpp +++ b/llvm/unittests/ADT/ArrayRefTest.cpp @@ -29,5 +29,12 @@ TEST(ArrayRefTest, AllocatorCopy) { EXPECT_NE(Array2.data(), Array2c.data()); } +TEST(ArrayRefTest, DropBack) { + static const int TheNumbers[] = {4, 8, 15, 16, 23, 42}; + ArrayRef<int> AR1(TheNumbers); + ArrayRef<int> AR2(TheNumbers, AR1.size() - 1); + EXPECT_TRUE(AR1.drop_back().equals(AR2)); +} + } // end anonymous namespace |