aboutsummaryrefslogtreecommitdiff
path: root/gcc/vec.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/vec.h')
-rw-r--r--gcc/vec.h41
1 files changed, 22 insertions, 19 deletions
diff --git a/gcc/vec.h b/gcc/vec.h
index 03455851..afde351 100644
--- a/gcc/vec.h
+++ b/gcc/vec.h
@@ -1184,25 +1184,17 @@ public:
};
-/* auto_vec is a sub class of vec whose storage is released when it is
- destroyed. */
-template<typename T>
+/* auto_vec is a subclass of vec that automatically manages creating and
+ releasing the internal vector. If N is non zero then it has N elements of
+ internal storage. The default is no internal storage, and you probably only
+ want to ask for internal storage for vectors on the stack because if the
+ size of the vector is larger than the internal storage that space is wasted.
+ */
+template<typename T, size_t N = 0>
class auto_vec : public vec<T, va_heap>
{
public:
- auto_vec () { this->m_vec = NULL; }
- auto_vec (size_t n) { this->create (n); }
- ~auto_vec () { this->release (); }
-};
-
-/* stack_vec is a subclass of vec containing N elements of internal storage.
- You probably only want to allocate this on the stack because if the array
- ends up being larger or much smaller than N it will be wasting space. */
-template<typename T, size_t N>
-class stack_vec : public vec<T, va_heap>
-{
-public:
- stack_vec ()
+ auto_vec ()
{
m_header.m_alloc = N;
m_header.m_has_auto_buf = 1;
@@ -1210,7 +1202,7 @@ public:
this->m_vec = reinterpret_cast<vec<T, va_heap, vl_embed> *> (&m_header);
}
- ~stack_vec ()
+ ~auto_vec ()
{
this->release ();
}
@@ -1222,6 +1214,17 @@ private:
T m_data[N];
};
+/* auto_vec is a sub class of vec whose storage is released when it is
+ destroyed. */
+template<typename T>
+class auto_vec<T, 0> : public vec<T, va_heap>
+{
+public:
+ auto_vec () { this->m_vec = NULL; }
+ auto_vec (size_t n) { this->create (n); }
+ ~auto_vec () { this->release (); }
+};
+
/* Allocate heap memory for pointer V and create the internal vector
with space for NELEMS elements. If NELEMS is 0, the internal
@@ -1421,7 +1424,7 @@ vec<T, va_heap, vl_ptr>::release (void)
if (using_auto_storage ())
{
- static_cast<stack_vec<T, 1> *> (this)->m_header.m_num = 0;
+ static_cast<auto_vec<T, 1> *> (this)->m_header.m_num = 0;
return;
}
@@ -1654,7 +1657,7 @@ vec<T, va_heap, vl_ptr>::using_auto_storage () const
return false;
const vec_prefix *auto_header
- = &static_cast<const stack_vec<T, 1> *> (this)->m_header;
+ = &static_cast<const auto_vec<T, 1> *> (this)->m_header;
return reinterpret_cast<vec_prefix *> (m_vec) == auto_header;
}