GCC Middle and Back End API Reference
|
#include <vec.h>
Public Types | |
using | pop_ret_type |
Public Member Functions | |
unsigned | allocated (void) const |
unsigned | length (void) const |
bool | is_empty (void) const |
T * | address (void) |
const T * | address (void) const |
T * | begin () |
const T * | begin () const |
T * | end () |
const T * | end () const |
const T & | operator[] (unsigned) const |
T & | operator[] (unsigned) |
const T & | last (void) const |
T & | last (void) |
bool | space (unsigned) const |
bool | iterate (unsigned, T *) const |
bool | iterate (unsigned, T **) const |
vec * | copy (ALONE_CXX_MEM_STAT_INFO) const |
void | splice (const vec &) |
void | splice (const vec *src) |
T * | quick_push (const T &) |
pop_ret_type | pop (void) |
void | truncate (unsigned) |
void | quick_insert (unsigned, const T &) |
void | ordered_remove (unsigned) |
void | unordered_remove (unsigned) |
void | block_remove (unsigned, unsigned) |
void | qsort (int(*)(const void *, const void *)) |
void | sort (int(*)(const void *, const void *, void *), void *) |
void | stablesort (int(*)(const void *, const void *, void *), void *) |
T * | bsearch (const void *key, int(*compar)(const void *, const void *)) |
T * | bsearch (const void *key, int(*compar)(const void *, const void *, void *), void *) |
unsigned | lower_bound (const T &, bool(*)(const T &, const T &)) const |
bool | contains (const T &search) const |
void | embedded_init (unsigned, unsigned=0, unsigned=0) |
void | quick_grow (unsigned len) |
void | quick_grow_cleared (unsigned len) |
Static Public Member Functions | |
static size_t | embedded_size (unsigned) |
Data Fields | |
vec_prefix | m_vecpfx |
Friends | |
template<typename, typename, typename> | |
struct | vec |
struct | va_gc |
struct | va_gc_atomic |
struct | va_heap |
Embeddable vector. These vectors are suitable to be embedded in other data structures so that they can be pre-allocated in a contiguous memory block. Embeddable vectors are implemented using the trailing array idiom, thus they are not resizeable without changing the address of the vector object itself. This means you cannot have variables or fields of embeddable vector type -- always use a pointer to a vector. The one exception is the final field of a structure, which could be a vector type. You will have to use the embedded_size & embedded_init calls to create such objects, and they will not be resizeable (so the 'safe' allocation variants are not available). Properties: - The whole vector and control data are allocated in a single contiguous block. It uses the trailing-vector idiom, so allocation must reserve enough space for all the elements in the vector plus its control data. - The vector cannot be re-allocated. - The vector cannot grow nor shrink. - No indirections needed for access/manipulation. - It requires 2 words of storage (prior to vector allocation).
References T.
Referenced by begin(), begin(), block_remove(), bsearch(), bsearch(), contains(), copy(), end(), end(), iterate(), iterate(), lower_bound(), operator[](), operator[](), ordered_remove(), pop(), qsort(), quick_grow_cleared(), quick_insert(), quick_push(), sort(), stablesort(), truncate(), and unordered_remove().
References T.
References m_vecpfx.
Referenced by quick_insert().
|
inline |
Return a pointer to a copy of this vector.
References address(), ALONE_MEM_STAT_DECL, length(), NULL, PASS_MEM_STAT, vec, vec_alloc(), and vec_copy_construct().
Referenced by vec_safe_copy().
|
inlinestatic |
Return the number of bytes needed to embed an instance of an embeddable vec inside another data structure. Use these methods to determine the required size and initialization of a vector V of type T embedded within another structure (as the final member): size_t vec<T, A, vl_embed>::embedded_size (unsigned alloc); void v->embedded_init (unsigned alloc, unsigned num); These allow the caller to perform the memory allocation.
References m_vecpfx.
|
inline |
Return iteration condition and update *PTR to point to the IX'th element of this vector. Use this to iterate over the elements of a vector as follows, for (ix = 0; v->iterate (ix, &ptr); ix++) continue; This variant is for vectors of objects.
References address(), CONST_CAST, m_vecpfx, T, and vec.
References gcc_checking_assert, m_vecpfx, and vec.
Get the final element of the vector, which must not be empty.
References gcc_checking_assert, m_vecpfx, and vec.
Referenced by pop().
References m_vecpfx.
Referenced by block_remove(), bsearch(), bsearch(), contains(), copy(), end(), end(), lower_bound(), ordered_remove(), pop(), qsort(), quick_grow(), quick_grow_cleared(), quick_insert(), sort(), stablesort(), truncate(), and unordered_remove().
References address(), gcc_checking_assert, m_vecpfx, and vec.
|
inline |
Index into vector. Return the IX'th element. IX must be in the domain of the vector.
References address(), gcc_checking_assert, m_vecpfx, and vec.
|
inline |
Sort the contents of this vector with qsort. CMP is the comparison function to pass to qsort.
References address(), gcc_qsort(), length(), T, and vec.
Grow the vector to a specific length. LEN must be as long or longer than the current length. The new elements are uninitialized.
References gcc_checking_assert, length(), m_vecpfx, and vec.
|
inline |
Grow the vector to a specific length. LEN must be as long or longer than the current length. The new elements are initialized to zero.
References address(), gcc_checking_assert, length(), m_vecpfx, vec, and vec_default_construct().
|
inline |
Insert an element, OBJ, at the IXth position of this vector. There must be sufficient space. This operation is not suitable for non-trivially copyable types.
References address(), allocated(), gcc_checking_assert, length(), m_vecpfx, T, and vec.
|
inline |
Sort the contents of this vector with qsort. CMP is the comparison function to pass to qsort.
References address(), gcc_sort_r(), length(), T, and vec.
If this vector has space for NELEMS additional entries, return true. You usually only need to use this if you are doing your own vector reallocation, for instance on an embedded vector. This returns true in exactly the same circumstances that vec::reserve will.
Referenced by quick_push().
void vec< T, A, vl_embed >::splice | ( | const vec< T, A, vl_embed > & | ) |
References vec.
void vec< T, A, vl_embed >::splice | ( | const vec< T, A, vl_embed > * | src | ) |
References quick_push(), T, and vec.
|
inline |
Sort the contents of this vector with gcc_stablesort_r. CMP is the comparison function to pass to qsort.
References address(), gcc_stablesort_r(), length(), T, and vec.
Set the length of the vector to SIZE. The new length must be less than or equal to the current length. This is an O(1) operation.
References address(), gcc_checking_assert, length(), m_vecpfx, vec, and vec_destruct().
Referenced by va_gc_atomic.
|
friend |
References va_gc_atomic, and va_heap.
Referenced by va_heap.
References vec.
Referenced by block_remove(), bsearch(), bsearch(), contains(), copy(), embedded_init(), embedded_size(), iterate(), iterate(), last(), last(), lower_bound(), operator[](), operator[](), ordered_remove(), pop(), qsort(), quick_grow(), quick_grow_cleared(), quick_insert(), quick_push(), sort(), space(), splice(), splice(), stablesort(), truncate(), unordered_remove(), and vec.
vec_prefix vec< T, A, vl_embed >::m_vecpfx |
Referenced by allocated(), block_remove(), embedded_init(), is_empty(), iterate(), iterate(), last(), last(), length(), operator[](), operator[](), ordered_remove(), pop(), quick_grow(), quick_grow_cleared(), quick_insert(), quick_push(), space(), truncate(), and unordered_remove().