skiplist add function find_ge
parent
01b1841fda
commit
4e53bd3e2d
|
|
@ -364,6 +364,16 @@ int flat_skiplist_find_all(FlatSkiplist *sl, void *data, FlatSkiplistIterator *i
|
|||
return 0;
|
||||
}
|
||||
|
||||
void *flat_skiplist_find_ge(FlatSkiplist *sl, void *data)
|
||||
{
|
||||
FlatSkiplistNode *node;
|
||||
node = flat_skiplist_get_first_larger_or_equal(sl, data);
|
||||
if (node == sl->top) {
|
||||
return NULL;
|
||||
}
|
||||
return node->data;
|
||||
}
|
||||
|
||||
int flat_skiplist_find_range(FlatSkiplist *sl, void *start_data, void *end_data,
|
||||
FlatSkiplistIterator *iterator)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ void *flat_skiplist_find(FlatSkiplist *sl, void *data);
|
|||
int flat_skiplist_find_all(FlatSkiplist *sl, void *data, FlatSkiplistIterator *iterator);
|
||||
int flat_skiplist_find_range(FlatSkiplist *sl, void *start_data, void *end_data,
|
||||
FlatSkiplistIterator *iterator);
|
||||
void *flat_skiplist_find_ge(FlatSkiplist *sl, void *data);
|
||||
|
||||
static inline void flat_skiplist_iterator(FlatSkiplist *sl, FlatSkiplistIterator *iterator)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -406,6 +406,16 @@ int multi_skiplist_find_all(MultiSkiplist *sl, void *data,
|
|||
}
|
||||
}
|
||||
|
||||
void *multi_skiplist_find_ge(MultiSkiplist *sl, void *data)
|
||||
{
|
||||
MultiSkiplistNode *node;
|
||||
node = multi_skiplist_get_first_larger_or_equal(sl, data);
|
||||
if (node == sl->tail) {
|
||||
return NULL;
|
||||
}
|
||||
return node->head->data;
|
||||
}
|
||||
|
||||
int multi_skiplist_find_range(MultiSkiplist *sl, void *start_data, void *end_data,
|
||||
MultiSkiplistIterator *iterator)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ int multi_skiplist_find_all(MultiSkiplist *sl, void *data,
|
|||
MultiSkiplistIterator *iterator);
|
||||
int multi_skiplist_find_range(MultiSkiplist *sl, void *start_data, void *end_data,
|
||||
MultiSkiplistIterator *iterator);
|
||||
void *multi_skiplist_find_ge(MultiSkiplist *sl, void *data);
|
||||
|
||||
static inline void multi_skiplist_iterator(MultiSkiplist *sl,
|
||||
MultiSkiplistIterator *iterator)
|
||||
|
|
|
|||
|
|
@ -83,6 +83,13 @@ typedef struct
|
|||
FCServerInfo *servers;
|
||||
} FCServerInfoArray;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int alloc;
|
||||
int count;
|
||||
FCServerInfo **servers;
|
||||
} FCServerInfoPtrArray;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int count;
|
||||
|
|
|
|||
|
|
@ -482,6 +482,17 @@ int uniq_skiplist_find_all(UniqSkiplist *sl, void *data,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void *uniq_skiplist_find_ge(UniqSkiplist *sl, void *data)
|
||||
{
|
||||
UniqSkiplistNode *node;
|
||||
node = uniq_skiplist_get_first_larger_or_equal(sl, data);
|
||||
if (node == sl->factory->tail) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return node->data;
|
||||
}
|
||||
|
||||
int uniq_skiplist_find_range(UniqSkiplist *sl, void *start_data,
|
||||
void *end_data, UniqSkiplistIterator *iterator)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -81,8 +81,10 @@ int uniq_skiplist_find_all(UniqSkiplist *sl, void *data,
|
|||
UniqSkiplistIterator *iterator);
|
||||
int uniq_skiplist_find_range(UniqSkiplist *sl, void *start_data,
|
||||
void *end_data, UniqSkiplistIterator *iterator);
|
||||
void *uniq_skiplist_find_ge(UniqSkiplist *sl, void *data);
|
||||
|
||||
static inline void uniq_skiplist_iterator(UniqSkiplist *sl, UniqSkiplistIterator *iterator)
|
||||
static inline void uniq_skiplist_iterator(UniqSkiplist *sl,
|
||||
UniqSkiplistIterator *iterator)
|
||||
{
|
||||
iterator->current = sl->top->links[0];
|
||||
iterator->tail = sl->factory->tail;
|
||||
|
|
|
|||
Loading…
Reference in New Issue