[PATCH 08/20] dix: use single return statement in DoGetDirection

Simon Thum simon.thum at gmx.de
Wed Apr 20 14:34:38 PDT 2011


On 04/20/2011 08:28 AM, Peter Hutterer wrote:
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>  dix/ptrveloc.c |   87 ++++++++++++++++++++++++++++++-------------------------
>  1 files changed, 47 insertions(+), 40 deletions(-)
> 
> diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c
> index c23d513..12c4067 100644
> --- a/dix/ptrveloc.c
> +++ b/dix/ptrveloc.c
> @@ -453,54 +453,61 @@ enum directions {
>   */
>  static int
>  DoGetDirection(int dx, int dy){
> -    float r;
> -    int i1, i2;
> +    int dir = 0;
> +
>      /* on insignificant mickeys, flag 135 degrees */
>      if(abs(dx) < 2 && abs(dy) < 2){
>  	/* first check diagonal cases */
>  	if(dx > 0 && dy > 0)
> -	    return E | SE | S;
> -	if(dx > 0 && dy < 0)
> -	    return N | NE | E;
> -	if(dx < 0 && dy < 0)
> -	    return W | NW | N;
> -	if(dx < 0 && dy > 0)
> -	    return W | SW | S;
> +	    dir = E | SE | S;
> +	else if(dx > 0 && dy < 0)
> +	    dir =  N | NE | E;
> +	else if(dx < 0 && dy < 0)
> +	    dir =  W | NW | N;
> +	else if(dx < 0 && dy > 0)
> +	    dir =  W | SW | S;
>          /* check axis-aligned directions */
> -	if(dx > 0)
> -            return NE | E | SE;
> -        if(dx < 0)
> -            return NW | W | SW;
> -        if(dy > 0)
> -            return SE | S | SW;
> -        if(dy < 0)
> -            return NE | N | NW;
> -        return UNDEFINED; /* shouldn't happen */
> -    }
> -    /* else, compute angle and set appropriate flags */
> +	else if(dx > 0)
> +            dir =  NE | E | SE;
> +        else if(dx < 0)
> +            dir =  NW | W | SW;
> +        else if(dy > 0)
> +            dir =  SE | S | SW;
> +        else if(dy < 0)
> +            dir =  NE | N | NW;
> +        else
> +            dir = UNDEFINED; /* shouldn't happen */
> +    } else { /* compute angle and set appropriate flags */
> +        float r;
> +        int i1, i2;
> +
>  #ifdef _ISOC99_SOURCE
> -    r = atan2f(dy, dx);
> +        r = atan2f(dy, dx);
>  #else
> -    r = atan2(dy, dx);
> +        r = atan2(dy, dx);
>  #endif
> -    /* find direction.
> -     *
> -     * Add 360° to avoid r become negative since C has no well-defined
> -     * modulo for such cases. Then divide by 45° to get the octant number,
> -     * e.g.     0 <= r <= 1 is [0-45]°
> -     *          1 <= r <= 2 is [45-90]°
> -     *          etc.
> -     * But we add extra 90° to match up with our N, S, etc. defines up
> -     * there, rest stays the same.
> -     */
> -    r = (r+(M_PI*2.5))/(M_PI/4);
> -    /* this intends to flag 2 directions (45 degrees),
> -     * except on very well-aligned mickeys. */
> -    i1 = (int)(r+0.1) % 8;
> -    i2 = (int)(r+0.9) % 8;
> -    if(i1 < 0 || i1 > 7 || i2 < 0 || i2 > 7)
> -	return UNDEFINED; /* shouldn't happen */
> -    return 1 << i1 | 1 << i2;
> +        /* find direction.
> +         *
> +         * Add 360° to avoid r become negative since C has no well-defined
> +         * modulo for such cases. Then divide by 45° to get the octant
> +         * number,  e.g.
> +         *          0 <= r <= 1 is [0-45]°
> +         *          1 <= r <= 2 is [45-90]°
> +         *          etc.
> +         * But we add extra 90° to match up with our N, S, etc. defines up
> +         * there, rest stays the same.
> +         */
> +        r = (r+(M_PI*2.5))/(M_PI/4);
> +        /* this intends to flag 2 directions (45 degrees),
> +         * except on very well-aligned mickeys. */
> +        i1 = (int)(r+0.1) % 8;
> +        i2 = (int)(r+0.9) % 8;
> +        if(i1 < 0 || i1 > 7 || i2 < 0 || i2 > 7)
> +            dir = UNDEFINED; /* shouldn't happen */
> +        else
> +            dir = (1 << i1 | 1 << i2);
> +    }
> +    return dir;
>  }
>  
>  #define DIRECTION_CACHE_RANGE 5
Reviewed-by: Simon Thum <simon.thum at gmx.de>

Although I don't see any specific improvement.

Cheers,

Simon



More information about the xorg-devel mailing list