henesyinit from p9f47575dc5 years agoHistory
103 lines · 1.7 KB · C
RawDownload
#include	"rework.h" staticnsame(int an, long *al, int bn, long *bl){	register n = 0;	register long *be = bl+bn; 	for(; --an >= 0; al++){		while((*bl < *al) && (bl < be))			bl++;		if(bl >= be)			break;		if(*bl == *al)			n++, bl++;	}	return(n);} voidNet::diff(){	register Net *o, *besto;	register n, bestn;	extern qflag; fprintf(stdout, "diff on net %s\n", name);	bestn = 0;	for(o = oldnets; o; o = o->next){		if(o->done)			continue;		if((n = nsame(nwires+1, pts, o->nwires+1, o->pts)) > bestn)			bestn = n, besto = o;	}	if(bestn > 0){		if(verbose)			vdiff(besto);		else			qflag? quickdiff(besto) : dumbdiff(besto);	} else {		if(oflag)			order();		if(verbose)			vpr("add new");		else {			if(DEBUG(name)) {				fprintf(stdout, "wrap new net %s\n", name);				fflush(stdout);			}			pr(NEW, name);			pr(RE, name);		}	}} voidNet::vpr(char *s){	register i; 	fprintf(stdout, "%s net %s:", s, name);	for(i = 0; i < nwires+1; i++)		fprintf(stdout, " %d/%d", XY(pts[i]));	putchar('\n');} dsame(int an, long *al, int bn, long *bl){	register long *be = bl+bn;	int diff = 0; 	for(; --an >= 0; al++){		while((*bl < *al) && (bl < be))			bl++;		if(bl >= be){			diff = 1;			break;		}		if(*bl == *al)			*al = *bl++ = -1;		else			diff = 1;	}	return(diff == 0);} voidNet::vdiff(Net *old){	register i;	register long *l; 	done = 1;	old->done = 1;	if(dsame(nwires+1, pts, old->nwires+1, old->pts))		return;	fprintf(stdout, "old %s -> new %s:", old->name, name);	for(i = 0, l = old->pts; i < old->nwires+1; i++, l++)		if(*l >= 0) fprintf(stdout, " -%d/%d", XY(*l));	for(i = 0, l = pts; i < nwires+1; i++, l++)		if(*l >= 0) fprintf(stdout, " +%d/%d", XY(*l));	putchar('\n');}