#ifndef __CKCAPI_UTIL_H__ #define __CKCAPI_UTIL_H__ #include /* -------------------------------------------------------------------------------- * ARRAYS */ typedef struct _Array { void* data; size_t len; } CkCapiArray; #define ckcapi_array_append(a,v) \ ckcapi_array_append_vals(a, &(v), 1) #define ckcapi_array_index(a,t,i) \ (((t*) (a)->data) [(i)]) CkCapiArray* ckcapi_array_new (int zero_terminated, int zero, size_t element_size); CkCapiArray* ckcapi_array_sized_new (int zero_terminated, int zero, size_t element_size, size_t reserved_size); void* ckcapi_array_free (CkCapiArray* array, int free_segment); int ckcapi_array_append_vals (CkCapiArray* array, const void* data, size_t num); void ckcapi_array_remove_index (CkCapiArray* array, unsigned int index); void ckcapi_array_remove_range (CkCapiArray* array, unsigned int index, size_t count); /* -------------------------------------------------------------------------------- * HASHTABLE */ struct _CkCapiHash; typedef struct _CkCapiHash CkCapiHash; typedef void (*CkCapiHashDestroy)(void* val); CkCapiHash* ckcapi_hash_new(); void ckcapi_hash_free(CkCapiHash* ht, CkCapiHashDestroy destroy_func); size_t ckcapi_hash_count(CkCapiHash* ht); void* ckcapi_hash_get(CkCapiHash* ht, const void* key, size_t klen); int ckcapi_hash_set(CkCapiHash* ht, const void* key, size_t klen, void* val); void* ckcapi_hash_rem(CkCapiHash* ht, const void* key, size_t klen); #endif /* __CKCAPI_UTIL_H__ */