hash_set: add iterator and remove method.
authorMartin Liska <mliska@suse.cz>
Thu, 16 Jul 2015 14:11:52 +0000 (16:11 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 16 Jul 2015 14:11:52 +0000 (14:11 +0000)
* hash-set.h (remove): New function.
(iterator): New iteration class for hash_set.

From-SVN: r225885

gcc/ChangeLog
gcc/hash-set.h

index 7046378..90254ff 100644 (file)
@@ -1,3 +1,8 @@
+2015-07-16  Martin Liska  <mliska@suse.cz>
+
+       * hash-set.h (remove): New function.
+       (iterator): New iteration class for hash_set.
+
 2015-07-16  Richard Sandiford  <richard.sandiford@arm.com>
 
        * genattrtab.c (make_canonical): Add a file_location parameter.
index 2fb6cae..e85af2a 100644 (file)
@@ -59,6 +59,11 @@ public:
       return !Traits::is_empty (e);
     }
 
+  void remove (const Key &k)
+    {
+      m_table.remove_elt_with_hash (k, Traits::hash (k));
+    }
+
   /* Call the call back on each pair of key and value with the passed in
      arg.  */
 
@@ -74,6 +79,40 @@ public:
 
   size_t elements () const { return m_table.elements (); }
 
+  class iterator
+  {
+  public:
+    explicit iterator (const typename hash_table<Traits>::iterator &iter) :
+      m_iter (iter) {}
+
+    iterator &operator++ ()
+      {
+       ++m_iter;
+       return *this;
+      }
+
+    Key
+    operator* ()
+      {
+       return *m_iter;
+      }
+
+    bool
+    operator != (const iterator &other) const
+      {
+       return m_iter != other.m_iter;
+      }
+
+  private:
+    typename hash_table<Traits>::iterator m_iter;
+  };
+
+  /* Standard iterator retrieval methods.  */
+
+  iterator begin () const { return iterator (m_table.begin ()); }
+  iterator end () const { return iterator (m_table.end ()); }
+
+
 private:
 
   template<typename T, typename U> friend void gt_ggc_mx (hash_set<T, U> *);