[ilist_node] Add a getReverseIterator() method and a unittest for it.
authorMichael Gottesman <mgottesman@apple.com>
Wed, 2 Nov 2016 00:59:58 +0000 (00:59 +0000)
committerMichael Gottesman <mgottesman@apple.com>
Wed, 2 Nov 2016 00:59:58 +0000 (00:59 +0000)
This is the reverse_iterator analogue of getIterator().

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

include/llvm/ADT/ilist_node.h
unittests/ADT/SimpleIListTest.cpp

index 84208b0841b94fabae7ddba3dc31bf790e10de72..7244d0f4058602116b6c5524defba09a5e9bf1cc 100644 (file)
@@ -80,6 +80,12 @@ private:
 public:
   self_iterator getIterator() { return self_iterator(*this); }
   const_self_iterator getIterator() const { return const_self_iterator(*this); }
+  reverse_self_iterator getReverseIterator() {
+    return reverse_self_iterator(*this);
+  }
+  const_reverse_self_iterator getReverseIterator() const {
+    return const_reverse_self_iterator(*this);
+  }
 
   // Under-approximation, but always available for assertions.
   using node_base_type::isKnownSentinel;
index 5a3834822d67b2783886420408242372d4e8b50c..a354f332006a11b1fbb051e242f71fdeb86dbf37 100644 (file)
@@ -178,6 +178,23 @@ TEST(SimpleIListTest, erase) {
   EXPECT_EQ(2u, L.size());
 }
 
+TEST(SimpleIListTest, reverse_iterator) {
+  simple_ilist<Node> L;
+  Node A, B, C;
+  L.push_back(A);
+  L.push_back(B);
+  L.push_back(C);
+
+  auto ReverseIter = L.rbegin();
+  EXPECT_EQ(C.getReverseIterator(), ReverseIter);
+  ++ReverseIter;
+  EXPECT_EQ(B.getReverseIterator(), ReverseIter);
+  ++ReverseIter;
+  EXPECT_EQ(A.getReverseIterator(), ReverseIter);
+  ++ReverseIter;
+  EXPECT_EQ(L.rend(), ReverseIter);
+}
+
 TEST(SimpleIListTest, eraseAndDispose) {
   simple_ilist<Node> L;
   Node A, C;