Add method _init_set & _set for B+tree
This commit is contained in:
1 parent
cb3038e73c
commit
73354a04d5
1 file changed
+41
+41
@@ -204,6 +204,47 @@
|
|||||||
b->root = NULL; \
|
b->root = NULL; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
static inline node_t M_C(name, _copy_node)(const node_t o) \
|
||||||
|
{ \
|
||||||
|
node_t n = M_C(name, _new_node)(); \
|
||||||
|
n->num = o->num; \
|
||||||
|
n->next = NULL; \
|
||||||
|
int num = M_C(name, _get_num)(o); \
|
||||||
|
for(int i = 0; i < num; i++) { \
|
||||||
|
M_GET_INIT_SET key_oplist(n->key[i], o->key[i]); \
|
||||||
|
} \
|
||||||
|
if (M_C(name, _is_leaf)(o)) { \
|
||||||
|
M_IF(isMap)( \
|
||||||
|
for(int i = 0; i < num; i++) { \
|
||||||
|
M_GET_INIT_SET value_oplist (n->kind.value[i], o->kind.value[i]); \
|
||||||
|
} \
|
||||||
|
,) \
|
||||||
|
} else { \
|
||||||
|
for(int i = 0; i <= num; i++) { \
|
||||||
|
n->kind.node[i] = M_C(name, _copy_node)(o->kind.node[i]); \
|
||||||
|
} \
|
||||||
|
for(int i = 0; i < num; i++) { \
|
||||||
|
n->kind.node[i]->next = n->kind.node[i+1]; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
return n; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline void M_C(name, _init_set)(tree_t b, const tree_t o) \
|
||||||
|
{ \
|
||||||
|
BPTREEI_CONTRACT(N, key_oplist, o); \
|
||||||
|
assert (b != NULL); \
|
||||||
|
b->root = M_C(name, _copy_node)(o->root); \
|
||||||
|
b->size = o->size; \
|
||||||
|
BPTREEI_CONTRACT(N, key_oplist, b); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline void M_C(name, _set)(tree_t b, const tree_t o) \
|
||||||
|
{ \
|
||||||
|
M_C(name, _clear)(b); \
|
||||||
|
M_C(name, _init_set)(b, o); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
static inline bool M_C(name, _empty_p)(const tree_t b) \
|
static inline bool M_C(name, _empty_p)(const tree_t b) \
|
||||||
{ \
|
{ \
|
||||||
BPTREEI_CONTRACT(N, key_oplist, b); \
|
BPTREEI_CONTRACT(N, key_oplist, b); \
|
||||||
|
|||||||
Reference in new issue
Block a user