diff --git a/HISTORY b/HISTORY index a3eddea..a6b13e8 100644 --- a/HISTORY +++ b/HISTORY @@ -1,4 +1,7 @@ +Version 1.45 2020-12-24 + * add function uniq_skiplist_find_node_ex + Version 1.44 2020-12-06 * add test file src/tests/test_pthread_lock.c * add uniq_skiplist.[hc] diff --git a/src/fast_buffer.h b/src/fast_buffer.h index 2e6ee44..aeabe27 100644 --- a/src/fast_buffer.h +++ b/src/fast_buffer.h @@ -108,4 +108,3 @@ static inline int fast_buffer_append_buffer(FastBuffer *buffer, FastBuffer *src) #endif #endif - diff --git a/src/uniq_skiplist.c b/src/uniq_skiplist.c index 2739f90..687e815 100644 --- a/src/uniq_skiplist.c +++ b/src/uniq_skiplist.c @@ -531,6 +531,16 @@ int uniq_skiplist_replace_ex(UniqSkiplist *sl, void *data, return 0; } +UniqSkiplistNode *uniq_skiplist_find_node_ex(UniqSkiplist *sl, void *data, + UniqSkiplistNode **previous) +{ + int level_index; + + *previous = uniq_skiplist_get_equal_previous(sl, data, &level_index); + return (*previous != NULL) ? (UniqSkiplistNode *) + (*previous)->links[level_index] : NULL; +} + UniqSkiplistNode *uniq_skiplist_find_node(UniqSkiplist *sl, void *data) { int level_index; diff --git a/src/uniq_skiplist.h b/src/uniq_skiplist.h index a27305d..c8a92c3 100644 --- a/src/uniq_skiplist.h +++ b/src/uniq_skiplist.h @@ -112,6 +112,10 @@ int uniq_skiplist_find_range(UniqSkiplist *sl, void *start_data, void *end_data, UniqSkiplistIterator *iterator); UniqSkiplistNode *uniq_skiplist_find_node(UniqSkiplist *sl, void *data); + +UniqSkiplistNode *uniq_skiplist_find_node_ex(UniqSkiplist *sl, void *data, + UniqSkiplistNode **previous); + void uniq_skiplist_delete_node_ex(UniqSkiplist *sl, UniqSkiplistNode *previous, UniqSkiplistNode *deleted, const bool need_free);