You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.0 KiB
C
38 lines
1.0 KiB
C
#ifndef SKIPLIST_HH
|
|
#define SKIPLIST_HH
|
|
|
|
#include <stdint.h>
|
|
|
|
typedef struct skiplistNode {
|
|
int64_t obj;
|
|
double score;
|
|
struct skiplistNode *backward;
|
|
struct skiplistLevel {
|
|
struct skiplistNode *forward;
|
|
unsigned int span;
|
|
} level[];
|
|
} skiplistNode;
|
|
|
|
typedef struct skiplist {
|
|
struct skiplistNode *header, *tail;
|
|
unsigned long length;
|
|
int level;
|
|
} skiplist;
|
|
|
|
typedef void (*slDeleteCb)(void *ud, int64_t obj);
|
|
void slFreeNode(skiplistNode *node);
|
|
|
|
skiplist *slCreate(void);
|
|
void slFree(skiplist *sl);
|
|
|
|
void slInsert(skiplist *sl, double score, int64_t obj);
|
|
int slDelete(skiplist *sl, double score, int64_t obj);
|
|
unsigned long slDeleteByRank(skiplist *sl, unsigned int start, unsigned int end, slDeleteCb cb, void *ud);
|
|
|
|
unsigned long slGetRank(skiplist *sl, double score, int64_t o);
|
|
skiplistNode *slGetNodeByRank(skiplist *sl, unsigned long rank);
|
|
|
|
skiplistNode *slFirstInRange(skiplist *sl, double min, double max);
|
|
skiplistNode *slLastInRange(skiplist *sl, double min, double max);
|
|
|
|
#endif //SKIPLIST_HH
|