maug
Quick and dirty C mini-augmentation library.
Data Structures | Macros | Functions
Data Memory Vectors

Structure for storing a linear and compact array of values. More...

Collaboration diagram for Data Memory Vectors:

Data Structures

struct  MDATA_VECTOR
 A vector of uniformly-sized objects, stored contiguously. More...
 

Macros

#define MDATA_VECTOR_FLAG_IS_LOCKED   0x02
 
#define mdata_vector_get(v, idx, type)    ((type*)mdata_vector_get_void( v, idx ))
 
#define mdata_vector_get_last(v, type)
 
#define mdata_vector_remove_last(v)
 
#define mdata_vector_set_ct_step(v, step)    (v)->ct_step = step;
 
#define mdata_vector_is_locked(v)
 
#define mdata_vector_insert_sort(v, i, t, field)
 
#define mdata_vector_sort(v, t, field)
 
#define _mdata_vector_item_ptr(v, idx)    (&((v)->data_bytes[((idx) * ((v)->item_sz))]))
 
#define mdata_vector_set_flag(v, flag)   (v)->flags |= (flag)
 
#define mdata_vector_get_flag(v, flag)   ((flag) == ((v)->flags & (flag)))
 

Functions

ssize_t mdata_vector_insert (struct MDATA_VECTOR *v, const void *item, ssize_t idx, size_t item_sz)
 
MERROR_RETVAL mdata_vector_copy (struct MDATA_VECTOR *v_dest, struct MDATA_VECTOR *v_src)
 
MERROR_RETVAL mdata_vector_alloc (struct MDATA_VECTOR *v, size_t item_sz, size_t item_ct_init)
 
void mdata_vector_free (struct MDATA_VECTOR *v)
 
ssize_t mdata_vector_append (struct MDATA_VECTOR *v, const void *item, size_t item_sz)
 Append an item to the specified vector. More...
 
MERROR_RETVAL mdata_vector_remove (struct MDATA_VECTOR *v, size_t idx)
 Remove item at the given index, shifting subsequent items up by 1. More...
 
void * mdata_vector_get_void (const struct MDATA_VECTOR *v, size_t idx)
 Get a generic pointer to an item in the MDATA_VECTOR. More...
 

Detailed Description

Structure for storing a linear and compact array of values.

Macro Definition Documentation

◆ mdata_vector_get_last

#define mdata_vector_get_last (   v,
  type 
)
Value:
(0 < mdata_vector_ct( v ) ? \
((type*)mdata_vector_get_void( v, \
mdata_vector_ct( v ) - 1 )) : NULL)
void * mdata_vector_get_void(const struct MDATA_VECTOR *v, size_t idx)
Get a generic pointer to an item in the MDATA_VECTOR.
#define mdata_vector_ct(v)
Number of items of MDATA_VECTOR::item_sz bytes actively stored in this vector.
Definition: mdata.h:396

◆ mdata_vector_is_locked

#define mdata_vector_is_locked (   v)
Value:
(MDATA_VECTOR_FLAG_IS_LOCKED == \
(MDATA_VECTOR_FLAG_IS_LOCKED & (v)->flags))

◆ mdata_vector_remove_last

#define mdata_vector_remove_last (   v)
Value:
(0 < mdata_vector_ct( v ) ? \
(mdata_vector_remove( v, mdata_vector_ct( v ) - 1 )) : MERROR_OVERFLOW)
MERROR_RETVAL mdata_vector_remove(struct MDATA_VECTOR *v, size_t idx)
Remove item at the given index, shifting subsequent items up by 1.

Function Documentation

◆ mdata_vector_alloc()

MERROR_RETVAL mdata_vector_alloc ( struct MDATA_VECTOR v,
size_t  item_sz,
size_t  item_ct_init 
)
Warning
The vector must not be locked before an append or allocate! Reallocation could change pointers gotten during a lock!

◆ mdata_vector_append()

ssize_t mdata_vector_append ( struct MDATA_VECTOR v,
const void *  item,
size_t  item_sz 
)
related

Append an item to the specified vector.

Parameters
vThe vector to append to.
itemThe address of an item to copy to the newly-created vector slow, or NULL to not copy anything.
item_szSize (in bytes) of the item to append. If the item is sized differently from the first item appended, MERROR_OVERFLOW will be returned and the item will not be appended.
Returns
Index of the appended item or MERROR_RETVAL * -1 if append fails.
Warning
The vector must not be locked before an append or allocate! Reallocation could change pointers gotten during a lock!

◆ mdata_vector_get_void()

void * mdata_vector_get_void ( const struct MDATA_VECTOR v,
size_t  idx 
)
related

Get a generic pointer to an item in the MDATA_VECTOR.

Parameters
vVector to request the item from. Should be locked!
idxIndex of item to retrieve.
Returns
Return a generic pointer to the item at the requested index, or NULL if the index is outside of the vector bounds.

◆ mdata_vector_remove()

MERROR_RETVAL mdata_vector_remove ( struct MDATA_VECTOR v,
size_t  idx 
)
related

Remove item at the given index, shifting subsequent items up by 1.

Warning
The vector must not be locked before a removal!