Change the tag on this iterator to bidir and implement enough operators to make it...
authorOwen Anderson <resistor@mac.com>
Thu, 6 Mar 2014 02:02:43 +0000 (02:02 +0000)
committerOwen Anderson <resistor@mac.com>
Thu, 6 Mar 2014 02:02:43 +0000 (02:02 +0000)
It ought to be possible to make this truly random access if anyone cares enough.

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

include/llvm/IR/Metadata.h

index 9992e5cbde1466d4c5ffdf3425810b589c326156..9b044a37298dbdb4576c029e4512268843893c84 100644 (file)
@@ -210,7 +210,7 @@ class NamedMDNode : public ilist_node<NamedMDNode> {
 
   template<class T1, class T2>
   class op_iterator_impl :
-      public std::iterator<std::random_access_iterator_tag, T2> {
+      public std::iterator<std::bidirectional_iterator_tag, T2> {
     const NamedMDNode *Node;
     unsigned Idx;
     op_iterator_impl(const NamedMDNode *N, unsigned i) : Node(N), Idx(i) { }
@@ -232,6 +232,16 @@ class NamedMDNode : public ilist_node<NamedMDNode> {
       operator++();
       return tmp;
     }
+    op_iterator_impl &operator--() {
+      --Idx;
+      return *this;
+    }
+    op_iterator_impl operator--(int) {
+      op_iterator_impl tmp(*this);
+      operator--();
+      return tmp;
+    }
+
     op_iterator_impl &operator=(const op_iterator_impl &o) {
       Node = o.Node;
       Idx = o.Idx;