erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

55 lines
1.2 KiB

//
// 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