All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Data Structures | Macros | Functions
target/Linux-x86_64/include/citrusleaf/cf_vector.h File Reference
#include <pthread.h>
#include <stdint.h>
#include <citrusleaf/cf_types.h>
+ Include dependency graph for target/Linux-x86_64/include/citrusleaf/cf_vector.h:
+ This graph shows which files directly or indirectly include this file:

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)
 

Macro Definition Documentation

#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

support multithreaded access with a single big lock

Definition at line 52 of file target/Linux-x86_64/include/citrusleaf/cf_vector.h.

#define VECTOR_FLAG_BIGRESIZE   0x04

appends will be common - speculatively allocate extra memory

Definition at line 62 of file target/Linux-x86_64/include/citrusleaf/cf_vector.h.

#define VECTOR_FLAG_INITZERO   0x02

internally init the vector objects to 0

Definition at line 57 of file target/Linux-x86_64/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 target/Linux-x86_64/include/citrusleaf/cf_vector.h.

Function Documentation

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 
)
static int cf_vector_integer_append ( cf_vector *  v,
int  i 
)
inlinestatic
static cf_vector* cf_vector_integer_create ( uint32_t  init_sz,
uint32_t  flags 
)
inlinestatic

integer vectors!

Definition at line 198 of file target/Linux-x86_64/include/citrusleaf/cf_vector.h.

References cf_vector_create().

static int cf_vector_integer_get ( cf_vector *  v,
uint32_t  index 
)
inlinestatic
static int cf_vector_integer_init ( cf_vector *  v,
uint32_t  init_sz,
uint32_t  flags 
)
inlinestatic
static int cf_vector_integer_set ( cf_vector *  v,
uint32_t  index,
int  i 
)
inlinestatic
static int cf_vector_pointer_append ( cf_vector *  v,
void *  p 
)
inlinestatic
static cf_vector* cf_vector_pointer_create ( uint32_t  init_sz,
uint32_t  flags 
)
inlinestatic

nice wrapper functions very common vector types are pointers, and integers

Definition at line 172 of file target/Linux-x86_64/include/citrusleaf/cf_vector.h.

References cf_vector_create().

static void* cf_vector_pointer_get ( cf_vector *  v,
uint32_t  index 
)
inlinestatic
static int cf_vector_pointer_init ( cf_vector *  v,
uint32_t  init_sz,
uint32_t  flags 
)
inlinestatic
static int cf_vector_pointer_set ( cf_vector *  v,
uint32_t  index,
void *  p 
)
inlinestatic
int cf_vector_set ( cf_vector *  v,
uint32_t  index,
void *  value 
)

Retrieve a value from the vector

static uint32_t cf_vector_size ( cf_vector *  v)
inlinestatic

Get the number of elements currently in the vector

Definition at line 163 of file target/Linux-x86_64/include/citrusleaf/cf_vector.h.