libqb  0.16.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Typedefs | Functions
qbarray.h File Reference

This is a dynamic array (it can grow, but without moving memory). More...

#include <stdint.h>
#include <unistd.h>
#include <qb/qbdefs.h>
Include dependency graph for qbarray.h:
This graph shows which files directly or indirectly include this file:

Typedefs

typedef struct qb_array qb_array_t
 This is an opaque data type representing an instance of an array.
 
typedef void(* qb_array_new_bin_cb_fn )(qb_array_t *a, uint32_t bin)
 

Functions

qb_array_tqb_array_create (size_t max_elements, size_t element_size)
 Create an array with fixed sized elements.
 
qb_array_tqb_array_create_2 (size_t max_elements, size_t element_size, size_t autogrow_elements)
 Create an array with fixed sized elements.
 
int32_t qb_array_index (qb_array_t *a, int32_t idx, void **element_out)
 Get an element at a particular index.
 
int32_t qb_array_grow (qb_array_t *a, size_t max_elements)
 Grow the array.
 
size_t qb_array_num_bins_get (qb_array_t *a)
 Get the number of bins used or the array.
 
size_t qb_array_elems_per_bin_get (qb_array_t *a)
 Get the number of elements per bin.
 
int32_t qb_array_new_bin_cb_set (qb_array_t *a, qb_array_new_bin_cb_fn fn)
 Get a callback when a new bin is allocated.
 
void qb_array_free (qb_array_t *a)
 Free all the memory used by the array.
 

Detailed Description

This is a dynamic array (it can grow, but without moving memory).

arr = qb_array_create_2(64, sizeof(struct my_struct), 256);
...
res = qb_array_index(arr, idx, (void**)&my_ptr);
if (res < 0) {
return res;
}
// use my_ptr, now even if there is a grow, this pointer will be valid.

Typedef Documentation

typedef void(* qb_array_new_bin_cb_fn)(qb_array_t *a, uint32_t bin)
typedef struct qb_array qb_array_t

This is an opaque data type representing an instance of an array.

Function Documentation

qb_array_t* qb_array_create ( size_t  max_elements,
size_t  element_size 
)

Create an array with fixed sized elements.

Parameters
max_elementsinitial max elements.
element_sizesize of each element.
Returns
array instance.
qb_array_t* qb_array_create_2 ( size_t  max_elements,
size_t  element_size,
size_t  autogrow_elements 
)

Create an array with fixed sized elements.

Parameters
max_elementsinitial max elements.
element_sizesize of each element.
autogrow_elementsthe number of elements to grow automatically by.
Returns
array instance.
Examples:
ipcserver.c.
size_t qb_array_elems_per_bin_get ( qb_array_t a)

Get the number of elements per bin.

void qb_array_free ( qb_array_t a)

Free all the memory used by the array.

Parameters
aarray instance.
int32_t qb_array_grow ( qb_array_t a,
size_t  max_elements 
)

Grow the array.

Parameters
aarray instance.
max_elementsthe new maximum size of the array.
Returns
(0 == success, else -errno)
int32_t qb_array_index ( qb_array_t a,
int32_t  idx,
void **  element_out 
)

Get an element at a particular index.

Parameters
aarray instance.
idxthe index
element_outthe pointer to the element data.
Returns
(0 == success, else -errno)
Examples:
ipcserver.c.
int32_t qb_array_new_bin_cb_set ( qb_array_t a,
qb_array_new_bin_cb_fn  fn 
)

Get a callback when a new bin is allocated.

size_t qb_array_num_bins_get ( qb_array_t a)

Get the number of bins used or the array.