From 7c2652509034b569eb4fc49faaf4dd7a61bfa8fd Mon Sep 17 00:00:00 2001 From: John Naylor Date: Mon, 19 Dec 2022 15:08:15 +0700 Subject: [PATCH v16 08/12] Use newnode variable to reduce unnecessary casting --- src/backend/lib/radixtree.c | 46 +++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/src/backend/lib/radixtree.c b/src/backend/lib/radixtree.c index 7c993e096b..ddf7b002fc 100644 --- a/src/backend/lib/radixtree.c +++ b/src/backend/lib/radixtree.c @@ -1284,6 +1284,7 @@ rt_node_insert_inner(radix_tree *tree, rt_node *parent, rt_node *node, uint64 ke { uint8 chunk = RT_GET_KEY_CHUNK(key, node->shift); bool chunk_exists = false; + rt_node *newnode = NULL; Assert(!NODE_IS_LEAF(node)); @@ -1306,18 +1307,16 @@ rt_node_insert_inner(radix_tree *tree, rt_node *parent, rt_node *node, uint64 ke if (unlikely(!VAR_NODE_HAS_FREE_SLOT(n4))) { rt_node_inner_32 *new32; - Assert(parent != NULL); /* grow node from 4 to 32 */ - new32 = (rt_node_inner_32 *) rt_grow_node_kind(tree, (rt_node *) n4, - RT_NODE_KIND_32); + newnode = rt_grow_node_kind(tree, node, RT_NODE_KIND_32); + new32 = (rt_node_inner_32 *) newnode; chunk_children_array_copy(n4->base.chunks, n4->children, new32->base.chunks, new32->children); Assert(parent != NULL); - rt_replace_node(tree, parent, (rt_node *) n4, (rt_node *) new32, - key); - node = (rt_node *) new32; + rt_replace_node(tree, parent, node, newnode, key); + node = newnode; } else { @@ -1354,19 +1353,17 @@ rt_node_insert_inner(radix_tree *tree, rt_node *parent, rt_node *node, uint64 ke if (unlikely(!VAR_NODE_HAS_FREE_SLOT(n32)) && n32->base.n.count == minclass.fanout) { - /* use the same node kind, but expand to the next size class */ - rt_node_inner_32 *new32; - - new32 = (rt_node_inner_32 *) rt_alloc_node(tree, RT_CLASS_32_FULL, true); - memcpy(new32, n32, minclass.inner_size); - new32->base.n.fanout = maxclass.fanout; + /* grow to the next size class of this kind */ + newnode = rt_alloc_node(tree, RT_CLASS_32_FULL, true); + memcpy(newnode, node, minclass.inner_size); + newnode->fanout = maxclass.fanout; Assert(parent != NULL); - rt_replace_node(tree, parent, (rt_node *) n32, (rt_node *) new32, key); + rt_replace_node(tree, parent, node, newnode, key); + node = newnode; - /* must update both pointers here */ - node = (rt_node *) new32; - n32 = new32; + /* also update pointer for this kind */ + n32 = (rt_node_inner_32 *) newnode; } if (unlikely(!VAR_NODE_HAS_FREE_SLOT(n32))) @@ -1374,14 +1371,14 @@ rt_node_insert_inner(radix_tree *tree, rt_node *parent, rt_node *node, uint64 ke rt_node_inner_125 *new125; /* grow node from 32 to 125 */ - new125 = (rt_node_inner_125 *) rt_grow_node_kind(tree, (rt_node *) n32, - RT_NODE_KIND_125); + newnode = rt_grow_node_kind(tree, node, RT_NODE_KIND_125); + new125 = (rt_node_inner_125 *) newnode; for (int i = 0; i < n32->base.n.count; i++) node_inner_125_insert(new125, n32->base.chunks[i], n32->children[i]); Assert(parent != NULL); - rt_replace_node(tree, parent, (rt_node *) n32, (rt_node *) new125, key); - node = (rt_node *) new125; + rt_replace_node(tree, parent, node, newnode, key); + node = newnode; } else { @@ -1420,8 +1417,8 @@ rt_node_insert_inner(radix_tree *tree, rt_node *parent, rt_node *node, uint64 ke Assert(parent != NULL); /* grow node from 125 to 256 */ - new256 = (rt_node_inner_256 *) rt_grow_node_kind(tree, (rt_node *) n125, - RT_NODE_KIND_256); + newnode = rt_grow_node_kind(tree, node, RT_NODE_KIND_256); + new256 = (rt_node_inner_256 *) newnode; for (int i = 0; i < RT_NODE_MAX_SLOTS && cnt < n125->base.n.count; i++) { if (!node_125_is_chunk_used(&n125->base, i)) @@ -1431,9 +1428,8 @@ rt_node_insert_inner(radix_tree *tree, rt_node *parent, rt_node *node, uint64 ke cnt++; } - rt_replace_node(tree, parent, (rt_node *) n125, (rt_node *) new256, - key); - node = (rt_node *) new256; + rt_replace_node(tree, parent, node, newnode, key); + node = newnode; } else { -- 2.38.1