![]() |
#include <pthread.h>
#include <stdint.h>
#include <citrusleaf/cf_types.h>
Go to the source code of this file.
Data Structures | |
struct | cf_vector |
Macros | |
#define | cf_vector_define(__x, __value_len, __flags) uint8_t cf_vector##__x[1024]; cf_vector __x; cf_vector_init_smalloc(&__x, __value_len, cf_vector##__x, sizeof(cf_vector##__x), __flags); |
#define | cf_vector_reset(__v) (__v)->len = 0; if ( (__v)->flags & VECTOR_FLAG_INITZERO) memset( (__v)->vector, 0, (__v)->alloc_len * (__v)->value_len); |
#define | VECTOR_ELEM_SZ(_v) ( _h->value_len ) |
#define | VECTOR_FLAG_BIGLOCK 0x01 |
#define | VECTOR_FLAG_BIGRESIZE 0x04 |
#define | VECTOR_FLAG_INITZERO 0x02 |
#define | VECTOR_REDUCE_DELETE (1) |
Functions | |
int | cf_vector_append (cf_vector *v, void *value) |
int | cf_vector_append_unique (cf_vector *v, void *value) |
void | cf_vector_compact (cf_vector *v) |
cf_vector * | cf_vector_create (uint32_t value_len, uint32_t init_sz, uint flags) |
int | cf_vector_delete (cf_vector *v, uint32_t index) |
int | cf_vector_delete_range (cf_vector *v, uint32_t start_index, uint32_t end_index) |
void | cf_vector_destroy (cf_vector *v) |
int | cf_vector_get (cf_vector *v, uint32_t index, void *value) |
void * | cf_vector_getp (cf_vector *v, uint32_t index) |
void * | cf_vector_getp_vlock (cf_vector *v, uint32_t index, pthread_mutex_t **vlock) |
int | cf_vector_init (cf_vector *v, uint32_t value_len, uint32_t init_sz, uint flags) |
void | cf_vector_init_smalloc (cf_vector *v, uint32_t value_len, uint8_t *sbuf, int sbuf_sz, uint flags) |
static int | cf_vector_integer_append (cf_vector *v, int i) |
static cf_vector * | cf_vector_integer_create (uint32_t init_sz, uint32_t flags) |
static int | cf_vector_integer_get (cf_vector *v, uint32_t index) |
static int | cf_vector_integer_init (cf_vector *v, uint32_t init_sz, uint32_t flags) |
static int | cf_vector_integer_set (cf_vector *v, uint32_t index, int i) |
static int | cf_vector_pointer_append (cf_vector *v, void *p) |
static cf_vector * | cf_vector_pointer_create (uint32_t init_sz, uint32_t flags) |
static void * | cf_vector_pointer_get (cf_vector *v, uint32_t index) |
static int | cf_vector_pointer_init (cf_vector *v, uint32_t init_sz, uint32_t flags) |
static int | cf_vector_pointer_set (cf_vector *v, uint32_t index, void *p) |
int | cf_vector_set (cf_vector *v, uint32_t index, void *value) |
static uint32_t | cf_vector_size (cf_vector *v) |
#define cf_vector_define | ( | __x, | |
__value_len, | |||
__flags | |||
) | uint8_t cf_vector##__x[1024]; cf_vector __x; cf_vector_init_smalloc(&__x, __value_len, cf_vector##__x, sizeof(cf_vector##__x), __flags); |
Definition at line 224 of file src/include/citrusleaf/cf_vector.h.
#define cf_vector_reset | ( | __v | ) | (__v)->len = 0; if ( (__v)->flags & VECTOR_FLAG_INITZERO) memset( (__v)->vector, 0, (__v)->alloc_len * (__v)->value_len); |
Definition at line 227 of file src/include/citrusleaf/cf_vector.h.
#define VECTOR_ELEM_SZ | ( | _v | ) | ( _h->value_len ) |
Definition at line 47 of file src/include/citrusleaf/cf_vector.h.
#define VECTOR_FLAG_BIGLOCK 0x01 |
support multithreaded access with a single big lock
Definition at line 52 of file src/include/citrusleaf/cf_vector.h.
#define VECTOR_FLAG_BIGRESIZE 0x04 |
appends will be common - speculatively allocate extra memory
Definition at line 62 of file src/include/citrusleaf/cf_vector.h.
#define VECTOR_FLAG_INITZERO 0x02 |
internally init the vector objects to 0
Definition at line 57 of file src/include/citrusleaf/cf_vector.h.
#define VECTOR_REDUCE_DELETE (1) |
indicate that a delete should be done during the reduction
Definition at line 67 of file src/include/citrusleaf/cf_vector.h.
int cf_vector_append | ( | cf_vector * | v, |
void * | value | ||
) |
int cf_vector_append_unique | ( | cf_vector * | v, |
void * | value | ||
) |
Adds a an element to the end, only if it doesn't exist already uses a bit-by-bit compare, thus is O(N) against the current length of the vector
void cf_vector_compact | ( | cf_vector * | v | ) |
There may be more allocated than you need. Fix that.
cf_vector* cf_vector_create | ( | uint32_t | value_len, |
uint32_t | init_sz, | ||
uint | flags | ||
) |
Create a vector with malloc for handing around
int cf_vector_delete | ( | cf_vector * | v, |
uint32_t | index | ||
) |
Deletes an element by moving all the remaining elements down by one
int cf_vector_delete_range | ( | cf_vector * | v, |
uint32_t | start_index, | ||
uint32_t | end_index | ||
) |
Delete a range in the vector. Inclusive. Thus: a vector with len 5, you could delete start=0, end=3, leaving one element at the beginning (slot 0) don't set start and end the same, that's a single element delete, use vector_delete instead (or change the code to support that!) returns -1 on bad ranges
void cf_vector_destroy | ( | cf_vector * | v | ) |
Destroy the entire hash - all memory will be freed
int cf_vector_get | ( | cf_vector * | v, |
uint32_t | index, | ||
void * | value | ||
) |
Place a value into the vector Value will be copied into the vector
void* cf_vector_getp | ( | cf_vector * | v, |
uint32_t | index | ||
) |
this is very dangerous if it's a multithreaded vector. Use _vlock if multithrad.
void* cf_vector_getp_vlock | ( | cf_vector * | v, |
uint32_t | index, | ||
pthread_mutex_t ** | vlock | ||
) |
int cf_vector_init | ( | cf_vector * | v, |
uint32_t | value_len, | ||
uint32_t | init_sz, | ||
uint | flags | ||
) |
create a stack vector, but with an allocated internal-vector-bit
void cf_vector_init_smalloc | ( | cf_vector * | v, |
uint32_t | value_len, | ||
uint8_t * | sbuf, | ||
int | sbuf_sz, | ||
uint | flags | ||
) |
|
inlinestatic |
Definition at line 216 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_append().
|
inlinestatic |
integer vectors!
Definition at line 198 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_create().
|
inlinestatic |
Definition at line 210 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_get().
|
inlinestatic |
Definition at line 202 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_init().
|
inlinestatic |
Definition at line 206 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_set().
|
inlinestatic |
Definition at line 190 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_append().
|
inlinestatic |
nice wrapper functions very common vector types are pointers, and integers
Definition at line 172 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_create().
|
inlinestatic |
Definition at line 184 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_get().
|
inlinestatic |
Definition at line 176 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_init().
|
inlinestatic |
Definition at line 180 of file src/include/citrusleaf/cf_vector.h.
References cf_vector_set().
int cf_vector_set | ( | cf_vector * | v, |
uint32_t | index, | ||
void * | value | ||
) |
Retrieve a value from the vector
|
inlinestatic |
Get the number of elements currently in the vector
Definition at line 163 of file src/include/citrusleaf/cf_vector.h.