[BACK]Return to dp-supp.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/dp-supp.c between version 1.13 and 1.16

version 1.13, 2001/09/04 08:48:18 version 1.16, 2001/09/17 01:18:34
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.12 2001/02/21 07:10:17 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.15 2001/09/11 08:56:47 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
   #include "inline.h"
 #include "parse.h"  #include "parse.h"
 #include "ox.h"  #include "ox.h"
   
Line 569  DP *rp;
Line 570  DP *rp;
         }          }
 }  }
   
   void _dp_sp_dup(p1,p2,rp)
   DP p1,p2;
   DP *rp;
   {
           int i,n,td;
           int *w;
           DL d1,d2,d;
           MP m;
           DP t,s1,s2,u;
           Q c,c1,c2;
           N gn,tn;
   
           n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;
           w = (int *)ALLOCA(n*sizeof(int));
           for ( i = 0, td = 0; i < n; i++ ) {
                   w[i] = MAX(d1->d[i],d2->d[i]); td += w[i];
           }
   
           _NEWDL(d,n); d->td = td - d1->td;
           for ( i = 0; i < n; i++ )
                   d->d[i] = w[i] - d1->d[i];
           c1 = (Q)BDY(p1)->c; c2 = (Q)BDY(p2)->c;
           if ( INT(c1) && INT(c2) ) {
                   gcdn(NM(c1),NM(c2),&gn);
                   if ( !UNIN(gn) ) {
                           divsn(NM(c1),gn,&tn); NTOQ(tn,SGN(c1),c); c1 = c;
                           divsn(NM(c2),gn,&tn); NTOQ(tn,SGN(c2),c); c2 = c;
                   }
           }
   
           _NEWMP(m); m->dl = d; m->c = (P)c2; NEXT(m) = 0;
           _MKDP(n,m,s1); s1->sugar = d->td; _muld_dup(CO,s1,p1,&t); _free_dp(s1);
   
           _NEWDL(d,n); d->td = td - d2->td;
           for ( i = 0; i < n; i++ )
                   d->d[i] = w[i] - d2->d[i];
           _NEWMP(m); m->dl = d; chsgnp((P)c1,&m->c); NEXT(m) = 0;
           _MKDP(n,m,s2); s2->sugar = d->td; _muld_dup(CO,s2,p2,&u); _free_dp(s2);
   
           _addd_destructive(CO,t,u,rp);
           if ( GenTrace ) {
                   LIST hist;
                   NODE node;
   
                   node = mknode(4,ONE,0,s1,ONE);
                   MKLIST(hist,node);
                   MKNODE(TraceList,hist,0);
   
                   node = mknode(4,ONE,0,0,ONE);
                   chsgnd(s2,(DP *)&ARG2(node));
                   MKLIST(hist,node);
                   MKNODE(node,hist,TraceList); TraceList = node;
           }
   }
   
 void dp_sp_mod(p1,p2,mod,rp)  void dp_sp_mod(p1,p2,mod,rp)
 DP p1,p2;  DP p1,p2;
 int mod;  int mod;
Line 771  DP *rp;
Line 827  DP *rp;
         DL d1,d2,d;          DL d1,d2,d;
         MP m;          MP m;
         DP t,s;          DP t,s;
         int c,c1;          int c,c1,c2;
 struct oEGT t0,t1;          struct oEGT t0,t1;
           extern int do_weyl;
   
         n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;          n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;
         _NEWDL(d,n); d->td = d1->td - d2->td;          _NEWDL(d,n); d->td = d1->td - d2->td;
         for ( i = 0; i < n; i++ )          for ( i = 0; i < n; i++ )
                 d->d[i] = d1->d[i]-d2->d[i];                  d->d[i] = d1->d[i]-d2->d[i];
         c = invm(ITOS(BDY(p2)->c),mod); c1 = dmar(c,ITOS(BDY(p1)->c),0,mod);          c = invm(ITOS(BDY(p2)->c),mod);
           c2 = ITOS(BDY(p1)->c);
           DMAR(c,c2,0,mod,c1);
         _NEWMP(m); m->dl = d; m->c = STOI(mod-c1); NEXT(m) = 0;          _NEWMP(m); m->dl = d; m->c = STOI(mod-c1); NEXT(m) = 0;
   #if 0
         _MKDP(n,m,s); s->sugar = d->td;          _MKDP(n,m,s); s->sugar = d->td;
         _mulmd_dup(mod,s,p2,&t); _free_dp(s);          _mulmd_dup(mod,s,p2,&t); _free_dp(s);
   #else
           if ( do_weyl ) {
                   _weyl_mulmdm_dup(mod,p2,m,&t); _FREEMP(m);
           } else {
                   _mulmdm_dup(mod,p2,m,&t); _FREEMP(m);
           }
   #endif
 /* get_eg(&t0); */  /* get_eg(&t0); */
         _addmd_destructive(mod,p1,t,rp);          _addmd_destructive(mod,p1,t,rp);
 /* get_eg(&t1); add_eg(&eg_red_mod,&t0,&t1); */  /* get_eg(&t1); add_eg(&eg_red_mod,&t0,&t1); */
           _print_mp(NV(*rp),BDY(*rp));
 }  }
   
 /*  /*
Line 1635  DP p;
Line 1703  DP p;
         }          }
 }  }
   
   int dp_homogeneous(p)
   DP p;
   {
           MP m;
           int d;
   
           if ( !p )
                   return 1;
           else {
                   m = BDY(p);
                   d = m->dl->td;
                   m = NEXT(m);
                   for ( ; m; m = NEXT(m) ) {
                           if ( m->dl->td != d )
                                   return 0;
                   }
                   return 1;
           }
   }
   
   _print_mp(nv,m)
   int nv;
   MP m;
   {
           int i;
   
           if ( m )
                   return;
           for ( ; m; m = NEXT(m) ) {
                   fprintf(stderr,"%d<",ITOS(C(m)));
                   for ( i = 0; i < nv; i++ ) {
                           fprintf(stderr,"%d",m->dl->d[i]);
                           if ( i != nv-1 )
                                   fprintf(stderr," ");
                   }
                   fprintf(stderr,">",C(m));
           }
           fprintf(stderr,"\n");
   }

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.16

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>