|
|
- //
- // Created by fox on 2017/10/10.
- //
-
- #ifndef NIF_SKIPLIST_SKIPLIST_H
- #define NIF_SKIPLIST_SKIPLIST_H
-
- #ifdef USENIF
- #define imalloc enif_alloc
- #define icalloc enif_alloc
- #define irealloc enif_realloc
- #define ifree enif_free
- #else
- #define imalloc malloc
- #define icalloc(x) calloc(x, 1)
- #define irealloc realloc
- #define ifree free
- #endif
-
- typedef int vtype;
-
- typedef struct snode {
- int score;
- int value;
- struct skiplistLevel {
- struct snode *forward;
- unsigned int span;
- } level[];
- } snode;
-
- typedef struct skiplist {
- int level;
- int size;
- struct snode *header;
- } skiplist;
-
- typedef struct skiplist_search_ret {
- int index; // start from 1
- snode *node;
- } skiplist_search_ret;
-
- void test_skiplist(void);
-
- // functions
- skiplist *skiplist_init(void);
- void skiplist_free(skiplist *list);
- int skiplist_insert(skiplist *list, int score, vtype value);
- int skiplist_update(skiplist *list, int score, vtype value, int old_score);
- int skiplist_delete(skiplist *list, int score, vtype value);
- void skiplist_search(skiplist *list, int score, skiplist_search_ret *ret);
- int skiplist_index_of_score(skiplist *list, int score);
- snode *skiplist_at(skiplist *list, int index);
-
-
- #endif //NIF_SKIPLIST_SKIPLIST_H
|