[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.33 and 1.35

version 1.33, 2004/04/15 08:44:15 version 1.35, 2004/05/14 06:02:54
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.32 2004/04/15 08:14:13 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.34 2004/04/22 07:52:38 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 1568  int create_composite_order_spec(VL vl,LIST order,struc
Line 1568  int create_composite_order_spec(VL vl,LIST order,struc
         if ( 1 ) print_composite_order_spec(spec);          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 1896  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 2036  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 2077  LIST highest_order(LIST f,int *weight,int n);
Line 2120  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 2146  LIST dp_order(LIST f,struct order_spec *ord)
Line 2191  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.33  
changed lines
  Added in v.1.35

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