Add _swap for RBTREE

This commit is contained in:
Patrick Pelissier committed 2017-03-14 20:40:04 +01:00
1 parent 8b327c4eaa
commit 3265c9fb4d
2 files changed
+28

No files matched your search

+16
View File
@@ -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) \
{ \
+12
View File
@@ -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);
}