#ifndef __SKIPLIST_H__ #define __SKIPLIST_H__ #include #define SKIPLIST_ALLOC_MEM(size) malloc((size)) #define SKIPLIST_FREE_MEM(ptr) free((ptr)) #define SKIPLIST_RAND() rand() #define SKIPLIST_RAND_MAX RAND_MAX enum SKIPLIST_ELOG{ SKIPLISTOK, SKIPLISTOK_EXIST = SKIPLISTOK, SKIPLISTERR, SKIPLISTERR_PARAM, SKIPLISTERR_POINTR, SKIPLISTERR_REEXIST, SKIPLISTERR_NOEXIST, }; typedef struct skiplist_t skiplist_t; typedef struct skiplist_node_t skiplist_node_t; typedef struct skiplist_level_t skiplist_level_t; typedef double skiplist_probability_t; typedef skiplist_node_t* skiplist_iterator_t; typedef int (*skiplist_cmp)(void* key,void* skiplist_data); typedef unsigned int skiplist_size_t; int skiplist_create(skiplist_t** sl,skiplist_probability_t probability,skiplist_cmp cmp); int skiplist_size(skiplist_t* sl,skiplist_size_t* size); int skiplist_getcmp(skiplist_t* sl,skiplist_cmp* cmp); int skiplist_insert(skiplist_t* sl,void* key,void* data); int skiplist_erase(skiplist_t* sl,void* key,void** retdata); int skiplist_exist(skiplist_t* sl,void* key,void** retdata); int skiplist_update(skiplist_t* sl,void* oldkey,void* newkey,void* newdata,void** retdata); int skiplist_destroy(skiplist_t** sl); int skiplist_begin(skiplist_t* sl,skiplist_iterator_t* it); int skiplist_end(skiplist_t* sl,skiplist_iterator_t* it); int skiplist_iterator_create(skiplist_iterator_t* it); int skiplist_iterator_equal(skiplist_iterator_t* it1,skiplist_iterator_t* it2); void skiplist_iterator_assign(skiplist_iterator_t* dit,const skiplist_iterator_t* sit); const void* skiplist_iterator_value(skiplist_iterator_t* it); void skiplist_iterator_next(skiplist_iterator_t* it); void skiplist_iterator_prev(skiplist_iterator_t* it); void skiplist_iterator_destroy(skiplist_iterator_t* it); #endif