Add _swap for RBTREE
This commit is contained in:
1 parent
8b327c4eaa
commit
3265c9fb4d
2 files changed
+28
No files matched your search
+16
@@ -59,6 +59,7 @@
|
||||
CLEAR(M_C3(rbtree_, name, _clear)), \
|
||||
INIT_MOVE(M_C3(rbtree_, name, _init_move)), \
|
||||
MOVE(M_C3(rbtree_, name, _move)), \
|
||||
SWAP(M_C3(rbtree_, name, _swap)), \
|
||||
TYPE(M_C3(rbtree_,name,_t)), \
|
||||
SUBTYPE(M_C3(rbtree_type_,name,_t)), \
|
||||
IT_TYPE(M_C3(rbtree_it_,name,_t)), \
|
||||
@@ -572,6 +573,21 @@ typedef enum {
|
||||
RBTREEI_CONTRACT (tree); \
|
||||
} \
|
||||
\
|
||||
static inline void \
|
||||
M_C3(rbtree_, name, _swap)(tree_t tree1, tree_t tree2) \
|
||||
{ \
|
||||
RBTREEI_CONTRACT (tree1); \
|
||||
RBTREEI_CONTRACT (tree2); \
|
||||
size_t size = tree1->size; \
|
||||
tree1->size = tree2->size; \
|
||||
tree2->size = size; \
|
||||
node_t *node = tree1->node; \
|
||||
tree1->node = tree2->node; \
|
||||
tree2->node = node; \
|
||||
RBTREEI_CONTRACT (tree1); \
|
||||
RBTREEI_CONTRACT (tree2); \
|
||||
} \
|
||||
\
|
||||
static inline bool \
|
||||
M_C3(rbtree_, name, _empty_p)(const tree_t tree) \
|
||||
{ \
|
||||
|
||||
@@ -94,7 +94,19 @@ static void test_uint(void)
|
||||
assert (ptr == NULL);
|
||||
}
|
||||
}
|
||||
|
||||
rbtree_uint_init (tree);
|
||||
assert(rbtree_uint_empty_p(tree));
|
||||
rbtree_uint_clean(tree2);
|
||||
rbtree_uint_push(tree2, 17421);
|
||||
assert(rbtree_uint_size(tree2) == 1);
|
||||
rbtree_uint_swap(tree, tree2);
|
||||
assert(rbtree_uint_empty_p(tree2));
|
||||
assert(rbtree_uint_size(tree) == 1);
|
||||
unsigned int *ptr = rbtree_uint_get(tree, 17421);
|
||||
assert(ptr != NULL && *ptr == 17421);
|
||||
|
||||
rbtree_uint_clear(tree);
|
||||
rbtree_uint_clear(tree2);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user