aboutsummaryrefslogtreecommitdiffstats
path: root/epan/wmem/wmem_tree.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2013-06-18 19:19:21 +0000
committerEvan Huus <eapache@gmail.com>2013-06-18 19:19:21 +0000
commit02752f3161c50be36a82b817a7028a920b8e3be5 (patch)
tree4e0c3b5a92bc6e39f095f5d60186647c0834f179 /epan/wmem/wmem_tree.c
parent881845a555373a70152eaed09f93745f92937990 (diff)
Factor function for node creation out and use it in several places.
svn path=/trunk/; revision=50010
Diffstat (limited to 'epan/wmem/wmem_tree.c')
-rw-r--r--epan/wmem/wmem_tree.c94
1 files changed, 39 insertions, 55 deletions
diff --git a/epan/wmem/wmem_tree.c b/epan/wmem/wmem_tree.c
index 43420f17c8..136c4ec402 100644
--- a/epan/wmem/wmem_tree.c
+++ b/epan/wmem/wmem_tree.c
@@ -278,6 +278,27 @@ wmem_tree_new_autoreset(wmem_allocator_t *master, wmem_allocator_t *slave)
return tree;
}
+static wmem_tree_node_t *
+create_node(wmem_allocator_t *allocator, wmem_tree_node_t *parent,
+ guint32 key, void *data, gint color, gint is_subtree)
+{
+ wmem_tree_node_t *node;
+
+ node = wmem_new(allocator, wmem_tree_node_t);
+
+ node->left = NULL;
+ node->right = NULL;
+ node->parent = parent;
+
+ node->key32 = key;
+ node->data = data;
+
+ node->u.rb_color = color;
+ node->u.is_subtree = is_subtree;
+
+ return node;
+}
+
static void *
lookup_or_insert32(wmem_tree_t *tree, guint32 key, void*(*func)(void*),void* ud, int is_subtree)
{
@@ -287,15 +308,9 @@ lookup_or_insert32(wmem_tree_t *tree, guint32 key, void*(*func)(void*),void* ud,
/* is this the first node ?*/
if(!node){
- node= wmem_new(tree->allocator, wmem_tree_node_t);
- node->u.rb_color=WMEM_TREE_RB_COLOR_BLACK;
- node->parent=NULL;
- node->left=NULL;
- node->right=NULL;
- node->key32=key;
- node->data= func(ud);
- node->u.is_subtree = is_subtree;
- tree->root=node;
+ node = create_node(tree->allocator, NULL, key, func(ud),
+ WMEM_TREE_RB_COLOR_BLACK, is_subtree);
+ tree->root = node;
return node->data;
}
@@ -311,14 +326,9 @@ lookup_or_insert32(wmem_tree_t *tree, guint32 key, void*(*func)(void*),void* ud,
if(!node->left){
/* new node to the left */
wmem_tree_node_t *new_node;
- new_node= wmem_new(tree->allocator, wmem_tree_node_t);
+ new_node = create_node(tree->allocator, node, key, func(ud),
+ WMEM_TREE_RB_COLOR_RED, is_subtree);
node->left=new_node;
- new_node->parent=node;
- new_node->left=NULL;
- new_node->right=NULL;
- new_node->key32=key;
- new_node->data= func(ud);
- new_node->u.is_subtree = is_subtree;
node=new_node;
break;
}
@@ -329,14 +339,9 @@ lookup_or_insert32(wmem_tree_t *tree, guint32 key, void*(*func)(void*),void* ud,
if(!node->right){
/* new node to the right */
wmem_tree_node_t *new_node;
- new_node= wmem_new(tree->allocator, wmem_tree_node_t);
+ new_node = create_node(tree->allocator, node, key, func(ud),
+ WMEM_TREE_RB_COLOR_RED, is_subtree);
node->right=new_node;
- new_node->parent=node;
- new_node->left=NULL;
- new_node->right=NULL;
- new_node->key32=key;
- new_node->data= func(ud);
- new_node->u.is_subtree = is_subtree;
node=new_node;
break;
}
@@ -346,7 +351,6 @@ lookup_or_insert32(wmem_tree_t *tree, guint32 key, void*(*func)(void*),void* ud,
}
/* node will now point to the newly created node */
- node->u.rb_color=WMEM_TREE_RB_COLOR_RED;
rb_insert_case1(tree, node);
return node->data;
@@ -360,15 +364,9 @@ wmem_tree_insert32(wmem_tree_t *tree, guint32 key, void *data)
node=tree->root;
/* is this the first node ?*/
- if(!node){
- node=wmem_new(tree->allocator, wmem_tree_node_t);
- node->u.rb_color=WMEM_TREE_RB_COLOR_BLACK;
- node->parent=NULL;
- node->left=NULL;
- node->right=NULL;
- node->key32=key;
- node->data=data;
- node->u.is_subtree = WMEM_TREE_NODE_IS_DATA;
+ if (!node) {
+ node = create_node(tree->allocator, NULL, key, data,
+ WMEM_TREE_RB_COLOR_BLACK, WMEM_TREE_NODE_IS_DATA);
tree->root=node;
return;
}
@@ -386,14 +384,9 @@ wmem_tree_insert32(wmem_tree_t *tree, guint32 key, void *data)
if(!node->left){
/* new node to the left */
wmem_tree_node_t *new_node;
- new_node=wmem_new(tree->allocator, wmem_tree_node_t);
+ new_node = create_node(tree->allocator, node, key, data,
+ WMEM_TREE_RB_COLOR_RED, WMEM_TREE_NODE_IS_DATA);
node->left=new_node;
- new_node->parent=node;
- new_node->left=NULL;
- new_node->right=NULL;
- new_node->key32=key;
- new_node->data=data;
- new_node->u.is_subtree=WMEM_TREE_NODE_IS_DATA;
node=new_node;
break;
}
@@ -404,14 +397,9 @@ wmem_tree_insert32(wmem_tree_t *tree, guint32 key, void *data)
if(!node->right){
/* new node to the right */
wmem_tree_node_t *new_node;
- new_node=wmem_new(tree->allocator, wmem_tree_node_t);
+ new_node = create_node(tree->allocator, node, key, data,
+ WMEM_TREE_RB_COLOR_RED, WMEM_TREE_NODE_IS_DATA);
node->right=new_node;
- new_node->parent=node;
- new_node->left=NULL;
- new_node->right=NULL;
- new_node->key32=key;
- new_node->data=data;
- new_node->u.is_subtree=WMEM_TREE_NODE_IS_DATA;
node=new_node;
break;
}
@@ -421,7 +409,6 @@ wmem_tree_insert32(wmem_tree_t *tree, guint32 key, void *data)
}
/* node will now point to the newly created node */
- node->u.rb_color=WMEM_TREE_RB_COLOR_RED;
rb_insert_case1(tree, node);
}
@@ -611,10 +598,8 @@ wmem_tree_insert32_array(wmem_tree_t *tree, wmem_tree_key_t *key, void *data)
wmem_tree_key_t *cur_key;
guint32 i, insert_key32 = 0;
- if(!tree || !key) return;
-
for (cur_key = key; cur_key->length > 0; cur_key++) {
- if(cur_key->length > 100) {
+ if (cur_key->length > 100) {
g_assert_not_reached();
}
@@ -629,13 +614,12 @@ wmem_tree_insert32_array(wmem_tree_t *tree, wmem_tree_key_t *key, void *data)
}
}
- if(!insert_tree) {
+ if (!insert_tree) {
/* We didn't get a valid key. Should we return NULL instead? */
g_assert_not_reached();
}
wmem_tree_insert32(insert_tree, insert_key32, data);
-
}
void *
@@ -647,7 +631,7 @@ wmem_tree_lookup32_array_helper(wmem_tree_t *tree, wmem_tree_key_t *key,
guint32 i, lookup_key32 = 0;
for (cur_key = key; cur_key->length > 0; cur_key++) {
- if(cur_key->length > 100) {
+ if (cur_key->length > 100) {
g_assert_not_reached();
}
@@ -666,7 +650,7 @@ wmem_tree_lookup32_array_helper(wmem_tree_t *tree, wmem_tree_key_t *key,
}
}
- if(!lookup_tree) {
+ if (!lookup_tree) {
/* We didn't get a valid key. Should we return NULL instead? */
g_assert_not_reached();
}