| version 1.17, 2019/08/28 23:27:34 |
version 1.19, 2019/09/04 05:32:10 |
|
|
| /* $OpenXM: OpenXM_contrib2/asir2018/engine/nd.c,v 1.16 2019/08/21 00:37:47 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2018/engine/nd.c,v 1.18 2019/09/04 01:12:02 noro Exp $ */ |
| |
|
| #include "nd.h" |
#include "nd.h" |
| |
|
| Line 8 struct oEGT eg_search,f4_symb,f4_conv,f4_elim1,f4_elim |
|
| Line 8 struct oEGT eg_search,f4_symb,f4_conv,f4_elim1,f4_elim |
|
| int diag_period = 6; |
int diag_period = 6; |
| int weight_check = 1; |
int weight_check = 1; |
| int (*ndl_compare_function)(UINT *a1,UINT *a2); |
int (*ndl_compare_function)(UINT *a1,UINT *a2); |
| |
/* for schreyer order */ |
| |
int (*ndl_base_compare_function)(UINT *a1,UINT *a2); |
| int nd_dcomp; |
int nd_dcomp; |
| int nd_rref2; |
int nd_rref2; |
| NM _nm_free_list; |
NM _nm_free_list; |
| Line 713 int ndl_module_grlex_compare(UINT *d1,UINT *d2) |
|
| Line 715 int ndl_module_grlex_compare(UINT *d1,UINT *d2) |
|
| |
|
| if ( nd_module_rank && (c = ndl_module_weight_compare(d1,d2)) ) return c; |
if ( nd_module_rank && (c = ndl_module_weight_compare(d1,d2)) ) return c; |
| if ( nd_ispot ) { |
if ( nd_ispot ) { |
| if ( nd_pot_nelim && MPOS(d1)>=nd_pot_nelim+1 && MPOS(d2) >= nd_pot_nelim+1 ) { |
if ( nd_pot_nelim && MPOS(d1)>=nd_pot_nelim+1 && MPOS(d2) >= nd_pot_nelim+1 ) { |
| if ( TD(d1) > TD(d2) ) return 1; |
if ( TD(d1) > TD(d2) ) return 1; |
| else if ( TD(d1) < TD(d2) ) return -1; |
else if ( TD(d1) < TD(d2) ) return -1; |
| if ( (c = ndl_lex_compare(d1,d2)) != 0 ) return c; |
if ( (c = ndl_lex_compare(d1,d2)) != 0 ) return c; |
| if ( MPOS(d1) < MPOS(d2) ) return 1; |
if ( MPOS(d1) < MPOS(d2) ) return 1; |
| else if ( MPOS(d1) > MPOS(d2) ) return -1; |
else if ( MPOS(d1) > MPOS(d2) ) return -1; |
| return 0; |
return 0; |
| |
} |
| |
if ( MPOS(d1) < MPOS(d2) ) return 1; |
| |
else if ( MPOS(d1) > MPOS(d2) ) return -1; |
| } |
} |
| if ( MPOS(d1) < MPOS(d2) ) return 1; |
|
| else if ( MPOS(d1) > MPOS(d2) ) return -1; |
|
| } |
|
| if ( TD(d1) > TD(d2) ) return 1; |
if ( TD(d1) > TD(d2) ) return 1; |
| else if ( TD(d1) < TD(d2) ) return -1; |
else if ( TD(d1) < TD(d2) ) return -1; |
| if ( (c = ndl_lex_compare(d1,d2)) != 0 ) return c; |
if ( (c = ndl_lex_compare(d1,d2)) != 0 ) return c; |
| Line 5512 void dpm_sort(DPM p,DPM *rp) |
|
| Line 5514 void dpm_sort(DPM p,DPM *rp) |
|
| MKDPM(n,t,d); |
MKDPM(n,t,d); |
| SG(d) = SG(p); |
SG(d) = SG(p); |
| *rp = d; |
*rp = d; |
| |
} |
| |
|
| |
int dpm_comp(DPM *a,DPM *b) |
| |
{ |
| |
return compdpm(CO,*a,*b); |
| |
} |
| |
|
| |
NODE dpm_sort_list(NODE l) |
| |
{ |
| |
int i,len; |
| |
NODE t,t1; |
| |
DPM *a; |
| |
|
| |
len = length(l); |
| |
a = (DPM *)MALLOC(len*sizeof(DPM)); |
| |
for ( t = l, i = 0; i < len; i++, t = NEXT(t) ) a[i] = (DPM)BDY(t); |
| |
qsort(a,len,sizeof(DPM),(int (*)(const void *,const void *))dpm_comp); |
| |
t = 0; |
| |
for ( i = len-1; i >= 0; i-- ) { |
| |
MKNODE(t1,(pointer)a[i],t); t = t1; |
| |
} |
| |
return t; |
| } |
} |
| |
|
| NDV dpmtondv(int mod,DPM p) |
NDV dpmtondv(int mod,DPM p) |