V10/libj/arith.c

Compare this file to the similar file:
Show the results in this format:

#include "jerq.h"
/* These routines are NOT portable, but they are fast. */

Point
add(a, b)
	Point a, b;
{
	register short *ap= &a.x, *bp= &b.x;
	*ap++ += *bp++;
	*ap += *bp;
	return a;
}

Point
sub(a, b)
	Point a, b;
{
	register short *ap= &a.x, *bp= &b.x;
	*ap++ -= *bp++;
	*ap -= *bp;
	return a;
}

Rectangle
inset(r,n)
	Rectangle r;
	register n;
{
	register short *rp= &r.origin.x;
	*rp++ += n;
	*rp++ += n;
	*rp++ -= n;
	*rp   -= n;
	return r;
}

Point
div(a, b)
	Point a;
	register b;
{
	register short *ap= &a.x;
	*(ap++)/=b;
	*ap/=b;
	return a;
}

Point
mul(a, b)
	Point a;
	register b;
{
	register short *ap= &a.x;	
	*(ap++)*=b;
	*ap*=b;
	return a;
}

Rectangle
rsubp(r, p)
	Rectangle r;
	Point p;
{
	register short *rp= &r.origin.x, *pp= &p.x;
	*rp++ -= *pp++;
	*rp++ -= *pp--;
	*rp++ -= *pp++;
	*rp   -= *pp;
	return r;
}

Rectangle
raddp(r, p)
	Rectangle r;
	Point p;
{
	register short *rp= &r.origin.x, *pp= &p.x;
	*rp++ += *pp++;
	*rp++ += *pp--;
	*rp++ += *pp++;
	*rp   += *pp;
	return r;
}

eqpt(p, q)
	Point p, q;
{
	register long *pp=(long *)&p, *qq=(long *)&q;
	return *pp==*qq;
}
eqrect(r, s)
	Rectangle r, s;
{
	register long *rr=(long *)&r, *ss=(long *)&s;
	return *rr++==*ss++ && *rr==*ss;
}