=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/gr.c,v retrieving revision 1.7 retrieving revision 1.11 diff -u -p -r1.7 -r1.11 --- OpenXM_contrib2/asir2000/builtin/gr.c 2000/07/14 08:26:39 1.7 +++ OpenXM_contrib2/asir2000/builtin/gr.c 2000/12/05 01:24:50 1.11 @@ -1,4 +1,52 @@ -/* $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.6 2000/07/13 05:09:00 noro Exp $ */ +/* + * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED + * All rights reserved. + * + * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited, + * non-exclusive and royalty-free license to use, copy, modify and + * redistribute, solely for non-commercial and non-profit purposes, the + * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and + * conditions of this Agreement. For the avoidance of doubt, you acquire + * only a limited right to use the SOFTWARE hereunder, and FLL or any + * third party developer retains all rights, including but not limited to + * copyrights, in and to the SOFTWARE. + * + * (1) FLL does not grant you a license in any way for commercial + * purposes. You may use the SOFTWARE only for non-commercial and + * non-profit purposes only, such as academic, research and internal + * business use. + * (2) The SOFTWARE is protected by the Copyright Law of Japan and + * international copyright treaties. If you make copies of the SOFTWARE, + * with or without modification, as permitted hereunder, you shall affix + * to all such copies of the SOFTWARE the above copyright notice. + * (3) An explicit reference to this SOFTWARE and its copyright owner + * shall be made on your publication or presentation in any form of the + * results obtained by use of the SOFTWARE. + * (4) In the event that you modify the SOFTWARE, you shall notify FLL by + * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification + * for such modification or the source code of the modified part of the + * SOFTWARE. + * + * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL + * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND + * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES' + * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY + * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY. + * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, + * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL + * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES + * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES + * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY + * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF + * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART + * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY + * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, + * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. + * + * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.10 2000/09/08 02:56:32 noro Exp $ +*/ #include "ca.h" #include "parse.h" #include "base.h" @@ -1451,7 +1499,8 @@ NODE subst; if ( m ) { get_eg(&tspm0); _dp_sp_mod_dup(psm[l->dp1],psm[l->dp2],m,&h); - new_sugar = h->sugar; + if ( h ) + new_sugar = h->sugar; get_eg(&tspm1); add_eg(&eg_spm,&tspm0,&tspm1); get_eg(&tnfm0); _dp_nf_mod_destructive(gall,h,psm,m,0,&nfm); @@ -1477,7 +1526,8 @@ NODE subst; STOQ(l->dp1,q); ARG1(BDY((LIST)BDY(NEXT(TraceList)))) = q; STOQ(l->dp2,q); ARG1(BDY((LIST)BDY(TraceList))) = q; } - new_sugar = h->sugar; + if ( h ) + new_sugar = h->sugar; get_eg(&tsp1); add_eg(&eg_sp,&tsp0,&tsp1); get_eg(&tnf0); t_0 = get_rtime(); @@ -1911,7 +1961,6 @@ DP *r; t_0 = get_rtime(); dp_subd(rp,red,&shift); -#if INET if ( Dist && ndist && HMAG(red) > kara_bit ) { NODE n0,n1,n2,n3; int i,s,id; @@ -1929,9 +1978,7 @@ DP *r; muldc(CO,rp,(P)cr,&t); NEXT(n0)=0; Pox_pop_local(n0,&t1); - } else -#endif - { + } else { /* if ( Print ) fprintf(asir_out,"l"); @@ -1977,7 +2024,6 @@ DP *r; if ( u ) { if ( HMAG(u) > hmag ) { t_0 = get_rtime(); -#if INET if ( Dist && HMAG(u) > kara_bit ) { if ( Print ) fprintf(asir_out,"D"); @@ -1986,10 +2032,7 @@ DP *r; if ( Print ) fprintf(asir_out,"L"); dp_ptozp_d(0,0,u,&t); - } -#else - dp_ptozp(u,&t); /* XXX */ -#endif + } dp_ptozp(u,&t); /* XXX */ tt = get_rtime()-t_0; t_g += tt; t_0 = get_rtime(); divsn(NM((Q)BDY(u)->c),NM((Q)BDY(t)->c),&cn); NTOQ(cn,1,cont); @@ -2707,11 +2750,6 @@ LIST *list; #define DELIM '/' -#if defined(THINK_C) -#undef DELIM -#define DELIM ':' -#endif - void dp_save(index,p,prefix) int index; Obj p; @@ -2724,11 +2762,7 @@ char *prefix; sprintf(path,"%s%c%s%d",Demand,DELIM,prefix,index); else sprintf(path,"%s%c%d",Demand,DELIM,index); -#if defined(VISUAL) || defined(THINK_C) if ( !(fp = fopen(path,"wb") ) ) -#else - if ( !(fp = fopen(path,"w") ) ) -#endif error("dp_save : cannot open a file"); savevl(fp,VC); saveobj(fp,p); fclose(fp); } @@ -2744,11 +2778,7 @@ DP *p; *p = ps[index]; else { sprintf(path,"%s%c%d",Demand,DELIM,index); -#if defined(VISUAL) || defined(THINK_C) if ( !(fp = fopen(path,"rb") ) ) -#else - if ( !(fp = fopen(path,"r") ) ) -#endif error("dp_load : cannot open a file"); skipvl(fp); loadobj(fp,(Obj *)p); fclose(fp); } @@ -2762,11 +2792,7 @@ DP *p; char path[BUFSIZ]; sprintf(path,"%s%c%d",Demand,DELIM,index); -#if defined(VISUAL) || defined(THINK_C) if ( !(fp = fopen(path,"rb") ) ) -#else - if ( !(fp = fopen(path,"r") ) ) -#endif return 0; else { skipvl(fp); loadobj(fp,(Obj *)p); fclose(fp); return 1; @@ -2790,161 +2816,3 @@ void print_stat() { print_eg("RA",&eg_ra); print_eg("MC",&eg_mc); print_eg("GC",&eg_gc); fprintf(asir_out,"T=%d,B=%d M=%d F=%d D=%d ZR=%d NZR=%d\n",TP,NBP,NMP,NFP,NDP,ZR,NZR); } - -/* - * Old codes - */ - -#if 0 -void _dp_nf_ptozp(b,g,ps,full,multiple,rp) -NODE b; -DP g; -DP *ps; -int full,multiple; -DP *rp; -{ - P dmy; - DP u,p,d,s,t,dmy1; - NODE l; - MP m,mr; - int i,n; - int hmag,denom; - int sugar,psugar; - NODE dist; - int ndist; - int kara_bit; - extern int kara_mag; - - if ( !g ) { - *rp = 0; return; - } - denom = Denominator?Denominator:1; - hmag = multiple*HMAG(g)/denom; - kara_bit = kara_mag*27; /* XXX */ - if ( Dist ) { - dist = BDY(Dist); - ndist = length(dist); - } - sugar = g->sugar; - for ( d = 0; g; ) { - for ( u = 0, l = b; l; l = NEXT(l) ) { - if ( dl_redble(BDY(g)->dl,psh[(int)BDY(l)]) ) { - dp_load((int)BDY(l),&p); - dp_red(d,g,p,&t,&u,&dmy,&dmy1); - psugar = (BDY(g)->dl->td - BDY(p)->dl->td) + p->sugar; - sugar = MAX(sugar,psugar); - if ( !u ) { - if ( d ) - d->sugar = sugar; - *rp = d; return; - } - d = t; - break; - } - } - if ( u ) { - g = u; - if ( d ) { - if ( HMAG(d) > hmag ) { - if ( Dist && HMAG(g) > kara_bit ) - dp_ptozp2_d(dist,ndist,d,g,&t,&u); - else - dp_ptozp2(d,g,&t,&u); - d = t; g = u; - hmag = multiple*HMAG(d)/denom; - } - } else { - if ( HMAG(g) > hmag ) { -#if INET - if ( Dist && HMAG(g) > kara_bit ) { - dp_ptozp_d(dist,ndist,g,&t); - } else -#endif - dp_ptozp(g,&t); - g = t; - hmag = multiple*HMAG(g)/denom; - } - } - } - else if ( !full ) { - if ( g ) { - MKDP(g->nv,BDY(g),t); t->sugar = sugar; g = t; - } - *rp = g; return; - } else { - m = BDY(g); NEWMP(mr); mr->dl = m->dl; mr->c = m->c; - NEXT(mr) = 0; MKDP(g->nv,mr,t); t->sugar = mr->dl->td; - addd(CO,d,t,&s); d = s; - dp_rest(g,&t); g = t; - } - } - if ( d ) - d->sugar = sugar; - *rp = d; -} - -int criterion_2(dp1,dp2) -{ - DP g1,g2,g,s1,s2; - - monomial_gcd(ps[dp1],&g1); monomial_gcd(ps[dp2],&g2); - dp_gcd(g1,g2,&g); - dp_subd(ps[dp1],g,&s1); dp_subd(ps[dp2],g,&s2); - return _criterion_2(s1,s2); -} - -int _criterion_2( dp1, dp2 ) -DP dp1, dp2; -{ - register int i, *d1, *d2; - - d1 = BDY(dp1)->dl->d; d2 = BDY(dp2)->dl->d; - for ( i = CNVars; --i >= 0; d1++, d2++ ) - if ( (*d1 <= *d2 ? *d1 : *d2) > 0 ) return 0; - return 1; -} - -void dp_gcd(p1,p2,rp) -DP p1,p2; -DP *rp; -{ - int i,n,td; - DL d1,d2,d; - MP m; - DP s; - - n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl; - NEWDL(d,n); - for ( i = 0, td = 0; i < n; i++ ) { - d->d[i] = MIN(d1->d[i],d2->d[i]); - td += d->d[i]; - } - d->td = td; - NEWMP(m); m->dl = d; m->c = (P)ONE; NEXT(m) = 0; MKDP(n,m,s); s->sugar = d->td; - *rp = s; -} - -void monomial_gcd(p,rp) -DP p; -DP *rp; -{ - int n,i,td; - DL d,d1; - MP m; - DP s; - - n = p->nv; m = BDY(p); d = m->dl; - NEWDL(d1,n); - for ( i = 0; i < n; i++ ) - d1->d[i] = d->d[i]; - for ( m = NEXT(m); m; m = NEXT(m) ) { - d = m->dl; - for ( i = 0; i < n; i++ ) - d1->d[i] = MIN(d1->d[i],d->d[i]); - } - for ( i = 0, td = 0; i < n; i++ ) - td += d1->d[i]; - NEWMP(m); m->dl = d1; m->c = (P)ONE; NEXT(m) = 0; MKDP(n,m,s); s->sugar = d->td; - *rp = s; -} -#endif