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;
|
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,
|
int flat_skiplist_find_range(FlatSkiplist *sl, void *start_data, void *end_data,
|
||||||
FlatSkiplistIterator *iterator)
|
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_all(FlatSkiplist *sl, void *data, FlatSkiplistIterator *iterator);
|
||||||
int flat_skiplist_find_range(FlatSkiplist *sl, void *start_data, void *end_data,
|
int flat_skiplist_find_range(FlatSkiplist *sl, void *start_data, void *end_data,
|
||||||
FlatSkiplistIterator *iterator);
|
FlatSkiplistIterator *iterator);
|
||||||
|
void *flat_skiplist_find_ge(FlatSkiplist *sl, void *data);
|
||||||
|
|
||||||
static inline void flat_skiplist_iterator(FlatSkiplist *sl, FlatSkiplistIterator *iterator)
|
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,
|
int multi_skiplist_find_range(MultiSkiplist *sl, void *start_data, void *end_data,
|
||||||
MultiSkiplistIterator *iterator)
|
MultiSkiplistIterator *iterator)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ int multi_skiplist_find_all(MultiSkiplist *sl, void *data,
|
||||||
MultiSkiplistIterator *iterator);
|
MultiSkiplistIterator *iterator);
|
||||||
int multi_skiplist_find_range(MultiSkiplist *sl, void *start_data, void *end_data,
|
int multi_skiplist_find_range(MultiSkiplist *sl, void *start_data, void *end_data,
|
||||||
MultiSkiplistIterator *iterator);
|
MultiSkiplistIterator *iterator);
|
||||||
|
void *multi_skiplist_find_ge(MultiSkiplist *sl, void *data);
|
||||||
|
|
||||||
static inline void multi_skiplist_iterator(MultiSkiplist *sl,
|
static inline void multi_skiplist_iterator(MultiSkiplist *sl,
|
||||||
MultiSkiplistIterator *iterator)
|
MultiSkiplistIterator *iterator)
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,13 @@ typedef struct
|
||||||
FCServerInfo *servers;
|
FCServerInfo *servers;
|
||||||
} FCServerInfoArray;
|
} FCServerInfoArray;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int alloc;
|
||||||
|
int count;
|
||||||
|
FCServerInfo **servers;
|
||||||
|
} FCServerInfoPtrArray;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
|
|
|
||||||
|
|
@ -482,6 +482,17 @@ int uniq_skiplist_find_all(UniqSkiplist *sl, void *data,
|
||||||
return 0;
|
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,
|
int uniq_skiplist_find_range(UniqSkiplist *sl, void *start_data,
|
||||||
void *end_data, UniqSkiplistIterator *iterator)
|
void *end_data, UniqSkiplistIterator *iterator)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -81,8 +81,10 @@ int uniq_skiplist_find_all(UniqSkiplist *sl, void *data,
|
||||||
UniqSkiplistIterator *iterator);
|
UniqSkiplistIterator *iterator);
|
||||||
int uniq_skiplist_find_range(UniqSkiplist *sl, void *start_data,
|
int uniq_skiplist_find_range(UniqSkiplist *sl, void *start_data,
|
||||||
void *end_data, UniqSkiplistIterator *iterator);
|
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->current = sl->top->links[0];
|
||||||
iterator->tail = sl->factory->tail;
|
iterator->tail = sl->factory->tail;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue