=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/nd.c,v retrieving revision 1.152 retrieving revision 1.154 diff -u -p -r1.152 -r1.154 --- OpenXM_contrib2/asir2000/engine/nd.c 2006/12/21 07:45:02 1.152 +++ OpenXM_contrib2/asir2000/engine/nd.c 2008/02/28 01:25:31 1.154 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.151 2006/12/14 02:49:59 noro Exp $ */ +/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.153 2007/04/30 02:11:12 noro Exp $ */ #include "nd.h" @@ -213,7 +213,7 @@ void ndl_homogenize(UINT *d,UINT *r,int obpe,EPOS oepo { int w,i,e,n,omask0; - omask0 = (1< nd_mask0 ) break; + if ( k < nd_nvar ) nd_det_reconstruct(dm,n,j,d); for ( i = j+1, mj = dm[j], mjj = mj[j]; i < n; i++ ) { @@ -5936,24 +5938,23 @@ void nd_det_reconstruct(NDV **dm,int n,int j,NDV d) #endif } +/* returns a UINT array containing degree bounds */ + UINT *nd_det_compute_bound(NDV **dm,int n,int j) { UINT *d0,*d1,*d,*t,*r; - int k,l; + int k,l,i; - d0 = (UINT *)ALLOCA(nd_wpd*sizeof(UINT)); - d1 = (UINT *)ALLOCA(nd_wpd*sizeof(UINT)); - for ( k = 0; k < nd_wpd; k++ ) d0[k] = 0; + d0 = (UINT *)MALLOC(nd_nvar*sizeof(UINT)); + for ( k = 0; k < nd_nvar; k++ ) d0[k] = 0; for ( k = j; k < n; k++ ) for ( l = j; l < n; l++ ) if ( dm[k][l] ) { d = ndv_compute_bound(dm[k][l]); - ndl_lcm(d,d0,d1); - t = d1; d1 = d0; d0 = t; + for ( i = 0; i < nd_nvar; i++ ) + d0[i] = MAX(d0[i],d[i]); } - r = (UINT *)ALLOCA(nd_wpd*sizeof(UINT)); - for ( k = 0; k < nd_wpd; k++ ) r[k] = d0[k]; - return r; + return d0; } DL nd_separate_d(UINT *d,UINT *trans)