]> granicus.if.org Git - llvm/commitdiff
[ADT] Add drop_front method to ArrayRef
authorReid Kleckner <rnk@google.com>
Tue, 3 May 2016 20:53:20 +0000 (20:53 +0000)
committerReid Kleckner <rnk@google.com>
Tue, 3 May 2016 20:53:20 +0000 (20:53 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@268434 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/ArrayRef.h
unittests/ADT/ArrayRefTest.cpp

index a801e985d15ce9daad14b4ffd0b05f675bdf2671..014db620715c5b2376b6993e176721bfced4d4d2 100644 (file)
@@ -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);
     }
index 6cbadd6bc228fa33df0cd1b2092162f9a1e99cb4..5a1ff785c347f37079359e40308bb247b84b79ed 100644 (file)
@@ -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);