]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
add some utility methods to vec
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>
Sun, 24 Apr 2016 07:47:38 +0000 (07:47 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Sun, 24 Apr 2016 07:47:38 +0000 (07:47 +0000)
gcc/ChangeLog:

2016-04-24  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

* vec.h (vec_safe_contains): New function.
(vec::contains): Likewise.
(vec::begin): Likewise.
(vec::end): Likewise.

From-SVN: r235392

gcc/ChangeLog
gcc/vec.h

index d2e15556206f283c2a739c0ffe6c53fbfc49945d..a820a0f9f7bd85f05a5395fa8bbde98ae45f68b2 100644 (file)
@@ -1,3 +1,10 @@
+2016-04-24  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * vec.h (vec_safe_contains): New function.
+       (vec::contains): Likewise.
+       (vec::begin): Likewise.
+       (vec::end): Likewise.
+
 2016-04-23  Jakub Jelinek  <jakub@redhat.com>
 
        PR sanitizer/70712
index ff575287894cb4934e36eb3301b5f4b1e66fde4a..eb8c27024f4e6c983ea33b59d003ab7f661ba5d5 100644 (file)
--- a/gcc/vec.h
+++ b/gcc/vec.h
@@ -454,6 +454,10 @@ public:
   bool is_empty (void) const { return m_vecpfx.m_num == 0; }
   T *address (void) { return m_vecdata; }
   const T *address (void) const { return m_vecdata; }
+  T *begin () { return address (); }
+  const T *begin () const { return address (); }
+  T *end () { return address () + length (); }
+  const T *end () const { return address () + length (); }
   const T &operator[] (unsigned) const;
   T &operator[] (unsigned);
   T &last (void);
@@ -473,6 +477,7 @@ public:
   void qsort (int (*) (const void *, const void *));
   T *bsearch (const void *key, int (*compar)(const void *, const void *));
   unsigned lower_bound (T, bool (*)(const T &, const T &)) const;
+  bool contains (const T &search) const;
   static size_t embedded_size (unsigned);
   void embedded_init (unsigned, unsigned = 0, unsigned = 0);
   void quick_grow (unsigned len);
@@ -542,7 +547,6 @@ vec_safe_is_empty (vec<T, A, vl_embed> *v)
   return v ? v->is_empty () : true;
 }
 
-
 /* If V does not have space for NELEMS elements, call
    V->reserve(NELEMS, EXACT).  */
 template<typename T, typename A>
@@ -695,6 +699,15 @@ vec_safe_splice (vec<T, A, vl_embed> *&dst, const vec<T, A, vl_embed> *src
     }
 }
 
+/* Return true if SEARCH is an element of V.  Note that this is O(N) in the
+   size of the vector and so should be used with care.  */
+
+template<typename T, typename A>
+inline bool
+vec_safe_contains (vec<T, A, vl_embed> *v, const T &search)
+{
+  return v ? v->contains (search) : false;
+}
 
 /* Index into vector.  Return the IX'th element.  IX must be in the
    domain of the vector.  */
@@ -973,6 +986,20 @@ vec<T, A, vl_embed>::bsearch (const void *key,
   return NULL;
 }
 
+/* Return true if SEARCH is an element of V.  Note that this is O(N) in the
+   size of the vector and so should be used with care.  */
+
+template<typename T, typename A>
+inline bool
+vec<T, A, vl_embed>::contains (const T &search) const
+{
+  unsigned int len = length ();
+  for (unsigned int i = 0; i < len; i++)
+    if ((*this)[i] == search)
+      return true;
+
+  return false;
+}
 
 /* Find and return the first position in which OBJ could be inserted
    without changing the ordering of this vector.  LESSTHAN is a
@@ -1167,6 +1194,10 @@ public:
   const T *address (void) const
   { return m_vec ? m_vec->m_vecdata : NULL; }
 
+  T *begin () { return address (); }
+  const T *begin () const { return address (); }
+  T *end () { return begin () + length (); }
+  const T *end () const { return begin () + length (); }
   const T &operator[] (unsigned ix) const
   { return (*m_vec)[ix]; }
 
@@ -1208,6 +1239,7 @@ public:
   void qsort (int (*) (const void *, const void *));
   T *bsearch (const void *key, int (*compar)(const void *, const void *));
   unsigned lower_bound (T, bool (*)(const T &, const T &)) const;
+  bool contains (const T &search) const;
 
   bool using_auto_storage () const;
 
@@ -1695,6 +1727,16 @@ vec<T, va_heap, vl_ptr>::lower_bound (T obj,
   return m_vec ? m_vec->lower_bound (obj, lessthan) : 0;
 }
 
+/* Return true if SEARCH is an element of V.  Note that this is O(N) in the
+   size of the vector and so should be used with care.  */
+
+template<typename T>
+inline bool
+vec<T, va_heap, vl_ptr>::contains (const T &search) const
+{
+  return m_vec ? m_vec->contains (search) : false;
+}
+
 template<typename T>
 inline bool
 vec<T, va_heap, vl_ptr>::using_auto_storage () const