[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.32 and 1.36

version 1.32, 2004/04/15 08:14:13 version 1.36, 2004/05/14 09:20:56
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.31 2004/03/09 09:40:46 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.35 2004/05/14 06:02:54 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 1565  int create_composite_order_spec(VL vl,LIST order,struc
Line 1565  int create_composite_order_spec(VL vl,LIST order,struc
                 w_or_b[n].body.block.order = 0;                  w_or_b[n].body.block.order = 0;
                 spec->ord.composite.length = n+1;                  spec->ord.composite.length = n+1;
         }          }
         if ( 1 ) print_composite_order_spec(spec);  
 }  }
   
   /* module order spec */
   
   void create_modorder_spec(int id,LIST shift,struct modorder_spec **s)
   {
           struct modorder_spec *spec;
           NODE n,t;
           LIST list;
           int *ds;
           int i,l;
           Q q;
   
           *s = spec = (struct modorder_spec *)MALLOC(sizeof(struct modorder_spec));
           spec->id = id;
           if ( shift ) {
                   n = BDY(shift);
                   spec->len = l = length(n);
                   spec->degree_shift = ds = (int *)MALLOC_ATOMIC(l*sizeof(int));
                   for ( t = n, i = 0; t; t = NEXT(t), i++ )
                           ds[i] = QTOS((Q)BDY(t));
           } else {
                   spec->len = 0;
                   spec->degree_shift = 0;
           }
           STOQ(id,q);
           n = mknode(2,q,shift);
           MKLIST(list,n);
           spec->obj = (Obj)list;
   }
   
 /*  /*
  * converters   * converters
  *   *
Line 1867  void dp_hm(DP p,DP *rp)
Line 1895  void dp_hm(DP p,DP *rp)
         }          }
 }  }
   
   void dp_ht(DP p,DP *rp)
   {
           MP m,mr;
   
           if ( !p )
                   *rp = 0;
           else {
                   m = BDY(p);
                   NEWMP(mr); mr->dl = m->dl; mr->c = (P)ONE; NEXT(mr) = 0;
                   MKDP(p->nv,mr,*rp); (*rp)->sugar = mr->dl->td;  /* XXX */
           }
   }
   
 void dp_rest(DP p,DP *rp)  void dp_rest(DP p,DP *rp)
 {  {
         MP m;          MP m;
Line 1994  LIST extract_initial_term(LIST f,int *weight,int n);
Line 2035  LIST extract_initial_term(LIST f,int *weight,int n);
   
 DP extract_initial_term_from_dp(DP p,int *weight,int n)  DP extract_initial_term_from_dp(DP p,int *weight,int n)
 {  {
         int w,t,i;          int w,t,i,top;
         MP m,r0,r;          MP m,r0,r;
         DP dp;          DP dp;
   
         if ( !p ) return 0;          if ( !p ) return 0;
         w = -1;          top = 1;
         for ( m = BDY(p); m; m = NEXT(m) ) {          for ( m = BDY(p); m; m = NEXT(m) ) {
                 for ( i = 0, t = 0; i < n; i++ )                  for ( i = 0, t = 0; i < n; i++ )
                         t += weight[i]*m->dl->d[i];                          t += weight[i]*m->dl->d[i];
                 if ( t > w ) {                  if ( top || t > w ) {
                         r0 = 0;                          r0 = 0;
                         w = t;                          w = t;
                           top = 0;
                 }                  }
                 if ( t == w ) {                  if ( t == w ) {
                         NEXTMP(r0,r);                          NEXTMP(r0,r);
Line 2058  LIST dp_initial_term(LIST f,struct order_spec *ord)
Line 2100  LIST dp_initial_term(LIST f,struct order_spec *ord)
                                 case IS_SPARSE_WEIGHT:                                  case IS_SPARSE_WEIGHT:
                                         n = ord->nv;                                          n = ord->nv;
                                         weight = (int *)ALLOCA(n*sizeof(int));                                          weight = (int *)ALLOCA(n*sizeof(int));
                                           for ( i = 0; i < n; i++ ) weight[i] = 0;
                                         l = worb->length;                                          l = worb->length;
                                         for ( i = 0; i < l; i++ )                                          for ( i = 0; i < l; i++ )
                                                 weight[worb->body.sparse_weight[i].pos]                                                  weight[worb->body.sparse_weight[i].pos]
Line 2076  LIST highest_order(LIST f,int *weight,int n);
Line 2119  LIST highest_order(LIST f,int *weight,int n);
   
 int highest_order_dp(DP p,int *weight,int n)  int highest_order_dp(DP p,int *weight,int n)
 {  {
         int w,t,i;          int w,t,i,top;
         MP m;          MP m;
   
         if ( !p ) return -1;          if ( !p ) return -1;
         w = -1;          top = 1;
         for ( m = BDY(p); m; m = NEXT(m) ) {          for ( m = BDY(p); m; m = NEXT(m) ) {
                 for ( i = 0, t = 0; i < n; i++ )                  for ( i = 0, t = 0; i < n; i++ )
                         t += weight[i]*m->dl->d[i];                          t += weight[i]*m->dl->d[i];
                 if ( t > w )                  if ( top || t > w ) {
                         w = t;                          w = t;
                           top = 0;
                   }
         }          }
         return w;          return w;
 }  }
Line 2134  LIST dp_order(LIST f,struct order_spec *ord)
Line 2179  LIST dp_order(LIST f,struct order_spec *ord)
                                 case IS_SPARSE_WEIGHT:                                  case IS_SPARSE_WEIGHT:
                                         n = ord->nv;                                          n = ord->nv;
                                         weight = (int *)ALLOCA(n*sizeof(int));                                          weight = (int *)ALLOCA(n*sizeof(int));
                                           for ( i = 0; i < n; i++ ) weight[i] = 0;
                                         l = worb->length;                                          l = worb->length;
                                         for ( i = 0; i < l; i++ )                                          for ( i = 0; i < l; i++ )
                                                 weight[worb->body.sparse_weight[i].pos]                                                  weight[worb->body.sparse_weight[i].pos]
Line 2144  LIST dp_order(LIST f,struct order_spec *ord)
Line 2190  LIST dp_order(LIST f,struct order_spec *ord)
                         }                          }
                 default:                  default:
                         error("dp_initial_term : unsupported order");                          error("dp_initial_term : unsupported order");
           }
   }
   
   int dpv_ht(DPV p,DP *h)
   {
           int len,max,maxi,i,t;
           DP *e;
           MP m,mr;
   
           len = p->len;
           e = p->body;
           max = -1;
           maxi = -1;
           for ( i = 0; i < len; i++ )
                   if ( e[i] && (t = BDY(e[i])->dl->td) > max ) {
                           max = t;
                           maxi = i;
                   }
           if ( max < 0 ) {
                   *h = 0;
                   return -1;
           } else {
                   m = BDY(e[maxi]);
                   NEWMP(mr); mr->dl = m->dl; mr->c = (P)ONE; NEXT(mr) = 0;
                   MKDP(e[maxi]->nv,mr,*h); (*h)->sugar = mr->dl->td;  /* XXX */
                   return maxi;
         }          }
 }  }

Legend:
Removed from v.1.32  
changed lines
  Added in v.1.36

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