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)), \
|
CLEAR(M_C3(rbtree_, name, _clear)), \
|
||||||
INIT_MOVE(M_C3(rbtree_, name, _init_move)), \
|
INIT_MOVE(M_C3(rbtree_, name, _init_move)), \
|
||||||
MOVE(M_C3(rbtree_, name, _move)), \
|
MOVE(M_C3(rbtree_, name, _move)), \
|
||||||
|
SWAP(M_C3(rbtree_, name, _swap)), \
|
||||||
TYPE(M_C3(rbtree_,name,_t)), \
|
TYPE(M_C3(rbtree_,name,_t)), \
|
||||||
SUBTYPE(M_C3(rbtree_type_,name,_t)), \
|
SUBTYPE(M_C3(rbtree_type_,name,_t)), \
|
||||||
IT_TYPE(M_C3(rbtree_it_,name,_t)), \
|
IT_TYPE(M_C3(rbtree_it_,name,_t)), \
|
||||||
@@ -572,6 +573,21 @@ typedef enum {
|
|||||||
RBTREEI_CONTRACT (tree); \
|
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 \
|
static inline bool \
|
||||||
M_C3(rbtree_, name, _empty_p)(const tree_t tree) \
|
M_C3(rbtree_, name, _empty_p)(const tree_t tree) \
|
||||||
{ \
|
{ \
|
||||||
|
|||||||
@@ -95,6 +95,18 @@ static void test_uint(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
rbtree_uint_clear(tree2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user