summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2016-05-03 20:53:20 +0000
committerReid Kleckner <rnk@google.com>2016-05-03 20:53:20 +0000
commit1e4ba37df14924b04186185382cca3276c7fc129 (patch)
tree378d8f05f64e72ef6dee7e1a0d37aeda8d672644
parentc6b688a81b2d13f47c71aacd35940fb234ee13d5 (diff)
downloadbcm5719-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.h16
-rw-r--r--llvm/unittests/ADT/ArrayRefTest.cpp7
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);
OpenPOWER on IntegriCloud