Expand EXCHG

This commit is contained in:
Kp 2015-04-02 02:36:54 +00:00
parent 2a1df52f71
commit b8f9c1a1de
2 changed files with 15 additions and 53 deletions

View file

@ -23,62 +23,20 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
/*#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
*/
#define IABS(x) (((x) < 0) ? -(x) : (x))
#define EXCHG(a,b) std::swap(a,b)
// sort two values
#define SORT2(a,b) do { \
if((a) > (b)) EXCHG(a,b); \
using std::swap; \
if((a) > (b)) swap(a,b); \
} while(0)
# define SCALE(var,arg,num,den) \
((var) = ((arg) * (num)) / (den))
# define USCALE(var,arg,num,den) \
((var) = ((unsigned)(arg) * (unsigned)(num)) / (unsigned)(den))
# define FIXSCALE(var,arg,num,den) ((var) = fixmuldiv((arg),(num),(den)))
#define CLIPDOT(xx,yy,WHEN_OUTSIDE,WHEN_CLIPPED) { \
if((xx > XMAX) || (xx < XMIN)) { WHEN_OUTSIDE; } \
if((yy > YMAX) || (yy < YMIN)) { WHEN_OUTSIDE; } \
}
#define CLIPHLINE(x1,x2,yy,WHEN_OUTSIDE,WHEN_CLIPPED) { \
if(x1 > x2) EXCHG(x1,x2); \
if((x1 > XMAX) || (x2 < XMIN)) { WHEN_OUTSIDE; } \
if((yy > YMAX) || (yy < YMIN)) { WHEN_OUTSIDE; } \
if(x1 < XMIN) { x1 = XMIN; WHEN_CLIPPED; } \
if(x2 > XMAX) { x2 = XMAX; WHEN_CLIPPED; } \
}
#define CLIPVLINE(xx,y1,y2,WHEN_OUTSIDE,WHEN_CLIPPED) { \
if(y1 > y2) EXCHG(y1,y2); \
if((xx > XMAX) || (xx < XMIN)) { WHEN_OUTSIDE; } \
if((y1 > YMAX) || (y2 < YMIN)) { WHEN_OUTSIDE; } \
if(y1 < YMIN) { y1 = YMIN; WHEN_CLIPPED; } \
if(y2 > YMAX) { y2 = YMAX; WHEN_CLIPPED; } \
}
#define CLIPBOX(x1,y1,x2,y2,WHEN_OUTSIDE,WHEN_CLIPPED) { \
if(x1 > x2) EXCHG(x1,x2); \
if(y1 > y2) EXCHG(y1,y2); \
if((x1 > XMAX) || (x2 < 0)) { WHEN_OUTSIDE; } \
if((y1 > YMAX) || (y2 < 0)) { WHEN_OUTSIDE; } \
if(x1 < 0) { x1 = 0; WHEN_CLIPPED; } \
if(y1 < 0) { y1 = 0; WHEN_CLIPPED; } \
if(x2 > XMAX) { x2 = XMAX; WHEN_CLIPPED; } \
if(y2 > YMAX) { y2 = YMAX; WHEN_CLIPPED; } \
}
#define CLIPLINE(x1,y1,x2,y2,XMIN,YMIN,XMAX,YMAX,WHEN_OUTSIDE,WHEN_CLIPPED,MY_SCALE) do { \
register int temp; \
int temp; \
if(y1 > y2) \
{ EXCHG(y1,y2); EXCHG(x1,x2); } \
{ \
using std::swap; \
swap(y1,y2); swap(x1,x2); } \
if((y2 < YMIN) || (y1 > YMAX)) \
{ WHEN_OUTSIDE; } \
if(x1 < x2) { \

View file

@ -51,7 +51,9 @@ static void plot(int x,int y,int flag)
static int gr_hline(int x1, int x2, int y)
{
if (x1 > x2) EXCHG(x1,x2);
using std::swap;
if (x1 > x2)
swap(x1,x2);
for (int i=x1; i<=x2; i++ )
gr_upixel( i, y );
return 0;
@ -59,7 +61,8 @@ static int gr_hline(int x1, int x2, int y)
static int gr_vline(int y1, int y2, int x)
{
if (y1 > y2) EXCHG(y1,y2);
using std::swap;
if (y1 > y2) swap(y1,y2);
for (int i=y1; i<=y2; i++ )
gr_upixel( x, i );
return 0;
@ -100,9 +103,10 @@ static void gr_universal_uline(int a1, int b1, int a2, int b2)
step = -1;
if (dy > dx) { /* chooses axis of greatest movement (make * dx) */
EXCHG(a1, b1);
EXCHG(a2, b2);
EXCHG(dx, dy);
using std::swap;
swap(a1, b1);
swap(a2, b2);
swap(dx, dy);
reverse = 1;
} else
reverse = 0;