/* * Copyright (C) 2007 Stef Walter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __CKCAPI_UTIL_H__ #define __CKCAPI_UTIL_H__ #include void ckcapi_reverse_memory (void* data, size_t length); /* -------------------------------------------------------------------------------- * 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 unsigned int (*CkCapiHashFunc)(const void* key); typedef int (*CkCapiHashEqual)(const void* a, const void* b); typedef void (*CkCapiHashDestroy)(void* val); CkCapiHash* ckcapi_hash_new (CkCapiHashFunc hash_func, CkCapiHashEqual equal_func); 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); int ckcapi_hash_set (CkCapiHash* ht, const void* key, void* val); void* ckcapi_hash_rem (CkCapiHash* ht, const void* key); unsigned int ckcapi_hash_pointer (const void* ptr); unsigned int ckcapi_hash_data (const void* data, size_t n_data); unsigned int ckcapi_hash_integer (int integer); #define ckcapi_hash_key(num) \ (((char*)NULL) + (size_t)(num)) #endif /* __CKCAPI_UTIL_H__ */