Add range for-loop iterator adapter for cases in SwitchInst.
authorOwen Anderson <resistor@mac.com>
Wed, 2 Jul 2014 05:32:13 +0000 (05:32 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 2 Jul 2014 05:32:13 +0000 (05:32 +0000)
Patch by Marcello Maggioni, reviewed by Reid Kleckner.

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

include/llvm/IR/Instructions.h

index e0c829ac985a68349330f8d986d3ce1d3575e7d3..a590f5ad7b2aefb65e13a50f821e63265db04049 100644 (file)
@@ -2661,6 +2661,9 @@ public:
       assert(RHS.SI == SI && "Incompatible operators.");
       return RHS.Index != Index;
     }
+    Self &operator*() {
+      return *this;
+    }
   };
 
   typedef CaseIteratorT<const SwitchInst, const ConstantInt, const BasicBlock>
@@ -2741,6 +2744,17 @@ public:
   ConstCaseIt case_end() const {
     return ConstCaseIt(this, getNumCases());
   }
+
+  /// cases - iteration adapter for range-for loops.
+  iterator_range<CaseIt> cases() {
+    return iterator_range<CaseIt>(case_begin(), case_end());
+  }
+
+  /// cases - iteration adapter for range-for loops.
+  iterator_range<ConstCaseIt> cases() const {
+    return iterator_range<ConstCaseIt>(case_begin(), case_end());
+  }
+
   /// Returns an iterator that points to the default case.
   /// Note: this iterator allows to resolve successor only. Attempt
   /// to resolve case value causes an assertion.