[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [Resend][PATCH 14/17] rbtree: place easiest case first in rb_erase()



On Thu, 2017-06-01 at 02:50 +0530, Praveen Kumar wrote:
> --- a/xen/common/rbtree.c
> +++ b/xen/common/rbtree.c
> @@ -376,18 +376,29 @@ static void __rb_erase_color(struct rb_node
> *node, struct rb_node *parent,
>  
>  void rb_erase(struct rb_node *node, struct rb_root *root)
>  {
> -    struct rb_node *child, *parent;
> +    struct rb_node *child = node->rb_right, *tmp = node->rb_left;
> +    struct rb_node *parent;
>      int color;
>  
> -    if (!node->rb_left)
> -        child = node->rb_right;
> -    else if (!node->rb_right)
> -        child = node->rb_left;
> -    else
> +    if (!tmp)
>      {
>
In the original Linux commit, this is:

 if (!tmp) {

I know that putting the '{' on new line is more Xen-ish, but since the
file is going to end up in a mixed style anyway, I think it's better to
import the commit as is (as much as possible) rather than make this
micro-adjustment (which, in future, may make importing new Linux
commits difficult).

> +    case1:
> +        /* Case 1: node to erase has no more than 1 child (easy!) */
> +
> +        parent = rb_parent(node);
> +        color = rb_color(node);
> +
> +        if (child)
> +            rb_set_parent(child, parent);
> +        __rb_change_child(node, child, parent, root);
> +    } else if (!child) {
> +        /* Still case 1, but this time the child is node->rb_left */
> +        child = tmp;
> +        goto case1;
> +    } else {
>          struct rb_node *old = node, *left;
>  
> -        node = node->rb_right;
> +        node = child;
>          while ((left = node->rb_left) != NULL)
>              node = left;
>  
Regards,
Dario
-- 
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.