[PATCH 08/20] dix: use single return statement in DoGetDirection
Peter Hutterer
peter.hutterer at who-t.net
Wed Apr 20 14:30:39 PDT 2011
On Wed, Apr 20, 2011 at 11:26:54AM -0700, Jamey Sharp wrote:
> This code mixes spaces and tabs, which you might consider making
> consistent as long as you're changing almost every line of the function
> anyway.
I'll fix it up, thanks
> Also, it isn't obvious to me why you're so excited about using a single
> return statement in several of these patches. :-)
I think I got a bit overexcited :) But debugging code is a lot simpler when
there's only one line to put a printf in or break point on, not several.
Cheers,
Peter
> On Wed, Apr 20, 2011 at 04:28:17PM +1000, 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
> > --
> > 1.7.4.4
> >
> > _______________________________________________
> > xorg-devel at lists.x.org: X.Org development
> > Archives: http://lists.x.org/archives/xorg-devel
> > Info: http://lists.x.org/mailman/listinfo/xorg-devel
More information about the xorg-devel
mailing list