diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-11-19 23:28:53 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-11-19 23:28:53 +0000 |
commit | db52566d684a36cf1f320f91ca5c15d5cd075b95 (patch) | |
tree | 6e426eea9f65a4512c3010f073d5a84222eef81d | |
parent | a197cba66d50f5411e0f45f7aa76cef9860ba28c (diff) |
Support backwards iteration starting from end().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119871 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/IntervalMap.h | 2 | ||||
-rw-r--r-- | unittests/ADT/IntervalMapTest.cpp | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/include/llvm/ADT/IntervalMap.h b/include/llvm/ADT/IntervalMap.h index b128f31a8d..dd4eec3c63 100644 --- a/include/llvm/ADT/IntervalMap.h +++ b/include/llvm/ADT/IntervalMap.h @@ -1235,7 +1235,7 @@ public: if (!branched()) { assert(rootOffset && "Cannot decrement begin()"); --rootOffset; - } else if (treeLeafOffset()) + } else if (valid() && treeLeafOffset()) --treeLeafOffset(); else treeDecrement(); diff --git a/unittests/ADT/IntervalMapTest.cpp b/unittests/ADT/IntervalMapTest.cpp index 5c8b61f278..c7def84340 100644 --- a/unittests/ADT/IntervalMapTest.cpp +++ b/unittests/ADT/IntervalMapTest.cpp @@ -352,6 +352,16 @@ TEST(IntervalMapTest, Branched) { EXPECT_FALSE(I.valid()); EXPECT_TRUE(I == map.end()); + // Backwards iteration. + for (unsigned i = 99; i; --i) { + --I; + ASSERT_TRUE(I.valid()); + EXPECT_EQ(10*i, I.start()); + EXPECT_EQ(10*i+5, I.stop()); + EXPECT_EQ(i, *I); + } + EXPECT_TRUE(I == map.begin()); + } } // namespace |