26 #ifndef CDCONTAINERS_INCLUDE_CDCONTAINERS_SPLAY_TREE_H 27 #define CDCONTAINERS_INCLUDE_CDCONTAINERS_SPLAY_TREE_H 365 return it->
prev != NULL;
426 #ifdef CDC_USE_SHORT_NAMES 429 typedef struct cdc_pair_splay_tree_iter pair_splay_tree_iter_t;
433 #define splay_tree_ctor(...) cdc_splay_tree_ctor(__VA_ARGS__) 434 #define splay_tree_ctorv(...) cdc_splay_tree_ctorv(__VA_ARGS__) 435 #define splay_tree_ctorl(...) cdc_splay_tree_ctorl(__VA_ARGS__) 436 #define splay_tree_dtor(...) cdc_splay_tree_dtor(__VA_ARGS__) 439 #define splay_tree_get(...) cdc_splay_tree_get(__VA_ARGS__) 440 #define splay_tree_count(...) cdc_splay_tree_count(__VA_ARGS__) 441 #define splay_tree_find(...) cdc_splay_tree_find(__VA_ARGS__) 444 #define splay_tree_size(...) cdc_splay_tree_size(__VA_ARGS__) 445 #define splay_tree_empty(...) cdc_splay_tree_empty(__VA_ARGS__) 448 #define splay_tree_clear(...) cdc_splay_tree_clear(__VA_ARGS__) 449 #define splay_tree_insert(...) cdc_splay_tree_insert(__VA_ARGS__) 450 #define splay_tree_insert1(...) cdc_splay_tree_insert1(__VA_ARGS__) 451 #define splay_tree_insert_or_assign(...) \ 452 cdc_splay_tree_insert_or_assign(__VA_ARGS__) 453 #define splay_tree_insert_or_assign1(...) \ 454 cdc_splay_tree_insert_or_assign1(__VA_ARGS__) 455 #define splay_tree_erase(...) cdc_splay_tree_erase(__VA_ARGS__) 456 #define splay_tree_swap(...) cdc_splay_tree_swap(__VA_ARGS__) 459 #define splay_tree_begin(...) cdc_splay_tree_begin(__VA_ARGS__) 460 #define splay_tree_end(...) cdc_splay_tree_end(__VA_ARGS__) 463 #define splay_tree_iter_next(...) cdc_splay_tree_iter_next(__VA_ARGS__) 464 #define splay_tree_iter_has_next(...) cdc_splay_tree_iter_has_next(__VA_ARGS__) 465 #define splay_tree_iter_key(...) cdc_splay_tree_iter_key(__VA_ARGS__) 466 #define splay_tree_iter_value(...) cdc_splay_tree_iter_value(__VA_ARGS__) 467 #define splay_tree_iter_key_value(...) \ 468 cdc_splay_tree_iter_key_value(__VA_ARGS__) 469 #define splay_tree_iter_is_eq(...) cdc_splay_tree_iter_is_eq(__VA_ARGS__) 472 #endif // CDCONTAINERS_INCLUDE_CDCONTAINERS_SPLAY_TREE_H void * value
Definition: splay-tree.h:51
enum cdc_stat cdc_splay_tree_insert_or_assign(struct cdc_splay_tree *t, void *key, void *value, struct cdc_pair_splay_tree_iter_bool *ret)
Inserts an element or assigns to the current element if the key already exists.
void cdc_splay_tree_iter_next(struct cdc_splay_tree_iter *it)
Advances the iterator to the next element in the splay tree.
Definition: splay-tree.h:76
struct cdc_splay_tree_node * parent
Definition: splay-tree.h:47
void * key
Definition: splay-tree.h:50
void cdc_splay_tree_iter_prev(struct cdc_splay_tree_iter *it)
Advances the iterator to the previous element in the splay tree.
static bool cdc_splay_tree_iter_has_next(struct cdc_splay_tree_iter *it)
Returns true if there is at least one element ahead of the iterator, i.e. the iterator is not at the ...
Definition: splay-tree.h:347
size_t size
Definition: splay-tree.h:61
size_t cdc_splay_tree_erase(struct cdc_splay_tree *t, void *key)
Removes the element (if one exists) with the key equivalent to key.
The cdc_splay_tree is service struct.
Definition: splay-tree.h:59
size_t cdc_splay_tree_count(struct cdc_splay_tree *t, void *key)
Returns the number of elements with key that compares equal to the specified argument key...
bool second
Definition: splay-tree.h:78
struct cdc_splay_tree_node * prev
Definition: splay-tree.h:72
void cdc_splay_tree_find(struct cdc_splay_tree *t, void *key, struct cdc_splay_tree_iter *it)
Finds an element with key equivalent to key.
enum cdc_stat cdc_splay_tree_get(struct cdc_splay_tree *t, void *key, void **value)
Returns a value that is mapped to a key. If the key does not exist, then NULL will return...
struct cdc_splay_tree * container
Definition: splay-tree.h:71
struct cdc_splay_tree_node * current
Definition: splay-tree.h:73
void cdc_splay_tree_end(struct cdc_splay_tree *t, struct cdc_splay_tree_iter *it)
Initializes the iterator to the end.
enum cdc_stat cdc_splay_tree_ctorl(struct cdc_splay_tree **t, struct cdc_data_info *info,...)
Constructs a splay tree, initialized by an variable number of pointers on cdc_pair's(first - key...
The cdc_splay_tree_iter is service struct.
Definition: splay-tree.h:70
enum cdc_stat cdc_splay_tree_insert(struct cdc_splay_tree *t, void *key, void *value, struct cdc_pair_splay_tree_iter_bool *ret)
Inserts an element into the container, if the container doesn't already contain an element with an eq...
static bool cdc_splay_tree_iter_is_eq(struct cdc_splay_tree_iter *it1, struct cdc_splay_tree_iter *it2)
Returns false if the iterator |it1| equal to the iterator |it2|, otherwise returns false...
Definition: splay-tree.h:414
struct cdc_splay_tree_node * left
Definition: splay-tree.h:48
void cdc_splay_tree_swap(struct cdc_splay_tree *a, struct cdc_splay_tree *b)
Swaps splay_trees a and b. This operation is very fast and never fails.
void cdc_splay_tree_dtor(struct cdc_splay_tree *t)
Destroys the splay tree.
enum cdc_stat cdc_splay_tree_insert_or_assign1(struct cdc_splay_tree *t, void *key, void *value, struct cdc_splay_tree_iter *it, bool *inserted)
Inserts an element or assigns to the current element if the key already exists.
cdc_stat
Definition: status.h:24
struct cdc_splay_tree_node * right
Definition: splay-tree.h:49
static bool cdc_splay_tree_empty(struct cdc_splay_tree *t)
Checks if the splay tree has no elements.
Definition: splay-tree.h:197
static struct cdc_pair cdc_splay_tree_iter_key_value(struct cdc_splay_tree_iter *it)
Returns a pair, where first - key, second - value.
Definition: splay-tree.h:397
static bool cdc_splay_tree_iter_has_prev(struct cdc_splay_tree_iter *it)
Returns true if there is at least one element behind the iterator, i.e. the iterator is not at the fr...
Definition: splay-tree.h:361
static void * cdc_splay_tree_iter_value(struct cdc_splay_tree_iter *it)
Returns an item's value.
Definition: splay-tree.h:385
void cdc_splay_tree_clear(struct cdc_splay_tree *t)
Removes all the elements from the splay_tree.
void cdc_splay_tree_begin(struct cdc_splay_tree *t, struct cdc_splay_tree_iter *it)
Initializes the iterator to the beginning.
struct cdc_data_info * dinfo
Definition: splay-tree.h:62
The cdc_splay_tree_node is service struct.
Definition: splay-tree.h:46
static size_t cdc_splay_tree_size(struct cdc_splay_tree *t)
Returns the number of items in the splay_tree.
Definition: splay-tree.h:185
The cdc_data_info struct used to initialize contaners.
Definition: common.h:71
enum cdc_stat cdc_splay_tree_insert1(struct cdc_splay_tree *t, void *key, void *value, struct cdc_splay_tree_iter *it, bool *inserted)
Inserts an element into the container, if the container doesn't already contain an element with an eq...
enum cdc_stat cdc_splay_tree_ctor(struct cdc_splay_tree **t, struct cdc_data_info *info)
Constructs an empty splay tree.
enum cdc_stat cdc_splay_tree_ctorv(struct cdc_splay_tree **t, struct cdc_data_info *info, va_list args)
Constructs a splay tree, initialized by args. The last item must be CDC_END.
struct cdc_splay_tree_node * root
Definition: splay-tree.h:60
static void * cdc_splay_tree_iter_key(struct cdc_splay_tree_iter *it)
Returns an item's key.
Definition: splay-tree.h:373