[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.42 and 1.43

version 1.42, 2007/09/06 02:23:40 version 1.43, 2007/09/07 00:45:50
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.41 2007/08/21 23:53:00 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.42 2007/09/06 02:23:40 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 1008  void dp_true_nf(NODE b,DP g,DP *ps,int full,DP *rp,P *
Line 1008  void dp_true_nf(NODE b,DP g,DP *ps,int full,DP *rp,P *
         *rp = d; *dnp = dn;          *rp = d; *dnp = dn;
 }  }
   
   void dp_removecont2(DP p1,DP p2,DP *r1p,DP *r2p,Q *contp)
   {
           struct oVECT v;
           int i,n1,n2,n;
           MP m,m0,t;
           Q *w;
           Q h;
   
           if ( p1 ) {
                   for ( i = 0, m = BDY(p1); m; m = NEXT(m), i++ );
                   n1 = i;
           } else
                   n1 = 0;
           if ( p2 ) {
                   for ( i = 0, m = BDY(p2); m; m = NEXT(m), i++ );
                   n2 = i;
           } else
                   n2 = 0;
           n = n1+n2;
           if ( !n ) {
                   *r1p = 0; *r2p = 0; *contp = ONE; return;
           }
           w = (Q *)ALLOCA(n*sizeof(Q));
           v.len = n;
           v.body = (pointer *)w;
           i = 0;
           if ( p1 )
                   for ( m = BDY(p1); i < n1; m = NEXT(m), i++ ) w[i] = (Q)m->c;
           if ( p2 )
                   for ( m = BDY(p2); i < n; m = NEXT(m), i++ ) w[i] = (Q)m->c;
           h = w[0]; removecont_array((P *)w,n,1); divq(h,w[0],contp);
           i = 0;
           if ( p1 ) {
                   for ( m0 = 0, t = BDY(p1); i < n1; i++, t = NEXT(t) ) {
                           NEXTMP(m0,m); m->c = (P)w[i]; m->dl = t->dl;
                   }
                   NEXT(m) = 0;
                   MKDP(p1->nv,m0,*r1p); (*r1p)->sugar = p1->sugar;
           } else
                   *r1p = 0;
           if ( p2 ) {
                   for ( m0 = 0, t = BDY(p2); i < n; i++, t = NEXT(t) ) {
                           NEXTMP(m0,m); m->c = (P)w[i]; m->dl = t->dl;
                   }
                   NEXT(m) = 0;
                   MKDP(p2->nv,m0,*r2p); (*r2p)->sugar = p2->sugar;
           } else
                   *r2p = 0;
   }
   
 /* true nf by a marked GB */  /* true nf by a marked GB */
   
 void dp_true_nf_marked(NODE b,DP g,DP *ps,DP *hps,DP *rp,P *dnp)  void dp_true_nf_marked(NODE b,DP g,DP *ps,DP *hps,DP *rp,P *nmp,P *dnp)
 {  {
         DP u,p,d,s,t,dmy,hp;          DP u,p,d,s,t,dmy,hp;
         NODE l;          NODE l;
         MP m,mr;          MP m,mr;
         int i,n;          int i,n,hmag;
         int *wb;          int *wb;
         int sugar,psugar;          int sugar,psugar,multiple;
         P dn,tdn,tdn1;          P nm,tnm1,dn,tdn,tdn1;
           Q cont;
   
           multiple = 0;
           hmag = multiple*HMAG(g);
           nm = (P)ONE;
         dn = (P)ONE;          dn = (P)ONE;
         if ( !g ) {          if ( !g ) {
                 *rp = 0; *dnp = dn; return;                  *rp = 0; *dnp = dn; return;
Line 1037  void dp_true_nf_marked(NODE b,DP g,DP *ps,DP *hps,DP *
Line 1091  void dp_true_nf_marked(NODE b,DP g,DP *ps,DP *hps,DP *
                                 psugar = (BDY(g)->dl->td - BDY(p)->dl->td) + p->sugar;                                  psugar = (BDY(g)->dl->td - BDY(p)->dl->td) + p->sugar;
                                 sugar = MAX(sugar,psugar);                                  sugar = MAX(sugar,psugar);
                                 if ( !u ) {                                  if ( !u ) {
                                         if ( d )                                          goto last;
                                                 d->sugar = sugar;  
                                         *rp = d; *dnp = dn; return;  
                                 } else {                                  } else {
                                         d = t;                                          d = t;
                                         mulp(CO,dn,tdn,&tdn1); dn = tdn1;                                          mulp(CO,dn,tdn,&tdn1); dn = tdn1;
Line 1047  void dp_true_nf_marked(NODE b,DP g,DP *ps,DP *hps,DP *
Line 1099  void dp_true_nf_marked(NODE b,DP g,DP *ps,DP *hps,DP *
                                 break;                                  break;
                         }                          }
                 }                  }
                 if ( u )                  if ( u ) {
                         g = u;                          g = u;
                 else {                          if ( multiple && ((d && HMAG(d)>hmag) || (HMAG(g)>hmag)) ) {
                                   dp_removecont2(d,g,&t,&u,&cont); d = t; g = u;
                                   mulp(CO,nm,(P)cont,&tnm1); nm = tnm1;
                                   if ( d )
                                           hmag = multiple*HMAG(d);
                                   else
                                           hmag = multiple*HMAG(g);
                           }
                   } else {
                         m = BDY(g); NEWMP(mr); mr->dl = m->dl; mr->c = m->c;                          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;                          NEXT(mr) = 0; MKDP(g->nv,mr,t); t->sugar = mr->dl->td;
                         addd(CO,d,t,&s); d = s;                          addd(CO,d,t,&s); d = s;
                         dp_rest(g,&t); g = t;                          dp_rest(g,&t); g = t;
                 }                  }
         }          }
         if ( d )  last:
           if ( d ) {
                   dp_removecont2(d,0,&t,&u,&cont); d = t;
                   mulp(CO,nm,(P)cont,&tnm1); nm = tnm1;
                 d->sugar = sugar;                  d->sugar = sugar;
         *rp = d; *dnp = dn;          }
           *rp = d; *nmp = nm; *dnp = dn;
 }  }
   
 /* nf computation over Z */  /* nf computation over Z */
Line 2555  NODE compute_last_w(NODE g,NODE gh,int n,int **w,
Line 2619  NODE compute_last_w(NODE g,NODE gh,int n,int **w,
                                 && compare_facet_preorder(n,*w,wt,row1,w1,row2,w2)) ) {                                  && compare_facet_preorder(n,*w,wt,row1,w1,row2,w2)) ) {
                                 NEXTMP(m0,m); m->c = f->c; m->dl = f->dl;                                  NEXTMP(m0,m); m->c = f->c; m->dl = f->dl;
                         }                          }
                         NEXT(m) = 0;  
                 }                  }
                   NEXT(m) = 0;
                 MKDP(((DP)BDY(t))->nv,m0,d);  d->sugar = ((DP)BDY(t))->sugar;                  MKDP(((DP)BDY(t))->nv,m0,d);  d->sugar = ((DP)BDY(t))->sugar;
                 NEXTNODE(r0,r); BDY(r) = (pointer)d;                  NEXTNODE(r0,r); BDY(r) = (pointer)d;
         }          }

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.43

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