=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/array.c,v retrieving revision 1.15 retrieving revision 1.17 diff -u -p -r1.15 -r1.17 --- OpenXM_contrib2/asir2000/builtin/array.c 2001/09/07 08:54:57 1.15 +++ OpenXM_contrib2/asir2000/builtin/array.c 2001/09/10 05:55:13 1.17 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.14 2001/09/04 05:14:03 noro Exp $ + * $OpenXM$ */ #include "ca.h" #include "base.h" @@ -67,6 +67,7 @@ void mat_to_gfmmat(MAT,unsigned int,GFMMAT *); int generic_gauss_elim_mod(int **,int,int,int,int *); int generic_gauss_elim(MAT ,MAT *,Q *,int **,int **); +void reduce_sp_by_red_mod_compress (int *,CDP *,int *,int,int,int); int gauss_elim_mod(int **,int,int,int); int gauss_elim_mod1(int **,int,int,int); @@ -1303,7 +1304,7 @@ int md; ONE_STEP1 ONE_STEP1 ONE_STEP1 ONE_STEP1 ONE_STEP1 ONE_STEP1 ONE_STEP1 ONE_STEP1 } - for ( ; k >= 0; k-- ) { + for ( ; k > 0; k-- ) { if ( zzz = *s ) { DMAR(zzz,hc,*tj,md,*tj) } tj++; s++; } } @@ -1390,7 +1391,7 @@ int md; hc = md-hc; s = redmat[i]+j; tj = sp+j; - for ( k = col-j; k >= 0; k-- ) { + for ( k = col-j; k > 0; k-- ) { if ( zzz = *s ) { DMAR(zzz,hc,*tj,md,*tj) } tj++; s++; } } @@ -1398,6 +1399,41 @@ int md; } /* + rlist : reducers list + ht(BDY(rlist)) < ht(BDY(NEXT(rlist)) < ... w.r.t. the term order +*/ + +void reduce_reducers_mod_compress(rlist,nred,at,col,md,redmatp,indredp) +NODE rlist; +int nred; +DL *at; +int col,md; +CDP **redmatp; +int **indredp; +{ + CDP *redmat; + CDP t; + int *indred,*w; + int i,k; + NODE r; + + *redmatp = redmat = (CDP *)CALLOC(nred,sizeof(CDP)); + *indredp = indred = (int *)CALLOC(nred,sizeof(int)); + w = (int *)CALLOC(col,sizeof(int)); + + _dpmod_to_vect_compress(BDY(rlist),at,&redmat[0]); + indred[0] = redmat[0]->body[0].index; + + for ( i = 1, r = NEXT(rlist); i < nred; i++, r = NEXT(r) ) { + bzero(w,col*sizeof(int)); + _dpmod_to_vect(BDY(r),at,w); + reduce_sp_by_red_mod_compress(w,redmat,indred,i,col,md); + compress_vect(w,col,&redmat[i]); + indred[i] = redmat[i]->body[0].index; + } +} + +/* mat[i] : compressed reducers (i=0,...,nred-1) mat[0] < mat[1] < ... < mat[nred-1] w.r.t the term order */ @@ -1484,7 +1520,7 @@ int *colstat; ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 } - for ( ; k >= 0; k -- ) { + for ( ; k > 0; k -- ) { if ( zzz = *pk ) { DMAR(zzz,a,*tk,md,*tk) } pk++; tk++; } } @@ -1517,7 +1553,7 @@ int *colstat; ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 ONE_STEP2 } - for ( ; k >= 0; k -- ) { + for ( ; k > 0; k -- ) { if ( zzz = *pk ) { DMAR(zzz,a,*tk,md,*tk) } pk++; tk++; } }