Skip to content

Commit

Permalink
prio_tree: simplify prio_tree_expand()
Browse files Browse the repository at this point in the history
In current code, the deleted-node is recorded from first to last,
actually, we can directly attach these node on 'node' we will insert as
the left child, it can let the code more readable.

Signed-off-by: Xiao Guangrong <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Xiao Guangrong authored and torvalds committed Mar 23, 2012
1 parent f35368d commit 742245d
Showing 1 changed file with 14 additions and 24 deletions.
38 changes: 14 additions & 24 deletions lib/prio_tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,43 +94,33 @@ static inline unsigned long prio_tree_maxindex(unsigned int bits)
static struct prio_tree_node *prio_tree_expand(struct prio_tree_root *root,
struct prio_tree_node *node, unsigned long max_heap_index)
{
struct prio_tree_node *first = NULL, *prev, *last = NULL;
struct prio_tree_node *prev;

if (max_heap_index > prio_tree_maxindex(root->index_bits))
root->index_bits++;

prev = node;
INIT_PRIO_TREE_NODE(node);

while (max_heap_index > prio_tree_maxindex(root->index_bits)) {
struct prio_tree_node *tmp = root->prio_tree_node;

root->index_bits++;

if (prio_tree_empty(root))
continue;

if (first == NULL) {
first = root->prio_tree_node;
prio_tree_remove(root, root->prio_tree_node);
INIT_PRIO_TREE_NODE(first);
last = first;
} else {
prev = last;
last = root->prio_tree_node;
prio_tree_remove(root, root->prio_tree_node);
INIT_PRIO_TREE_NODE(last);
prev->left = last;
last->parent = prev;
}
}

INIT_PRIO_TREE_NODE(node);
prio_tree_remove(root, root->prio_tree_node);
INIT_PRIO_TREE_NODE(tmp);

if (first) {
node->left = first;
first->parent = node;
} else
last = node;
prev->left = tmp;
tmp->parent = prev;
prev = tmp;
}

if (!prio_tree_empty(root)) {
last->left = root->prio_tree_node;
last->left->parent = last;
prev->left = root->prio_tree_node;
prev->left->parent = prev;
}

root->prio_tree_node = node;
Expand Down

0 comments on commit 742245d

Please sign in to comment.