=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/engine/nd.h,v retrieving revision 1.8 retrieving revision 1.12 diff -u -p -r1.8 -r1.12 --- OpenXM_contrib2/asir2018/engine/nd.h 2020/06/19 10:18:13 1.8 +++ OpenXM_contrib2/asir2018/engine/nd.h 2021/11/29 09:19:33 1.12 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM_contrib2/asir2018/engine/nd.h,v 1.7 2019/08/21 00:37:47 noro Exp $ */ +/* $OpenXM: OpenXM_contrib2/asir2018/engine/nd.h,v 1.11 2020/10/26 02:41:05 noro Exp $ */ #include "ca.h" #include "parse.h" #include "ox.h" @@ -30,7 +30,7 @@ typedef struct oPGeoBucket { typedef struct oSIG { int pos; - DL dl; + DL dl,dl2; } *SIG; /* distributed polynomial; linked list rep. */ @@ -89,6 +89,7 @@ typedef struct oND_pairs { int sugar; int sugar2; SIG sig; + int zero; UINT lcm[1]; } *ND_pairs; @@ -114,6 +115,7 @@ typedef struct oNM_ind_pair { NM mul; int index,sugar; + SIG sig; } *NM_ind_pair; typedef struct oIndArray @@ -162,6 +164,7 @@ extern int *current_module_weight_vector; #define CP(x) ((x)->c.p) #define CA(x) ((x)->c.a) #define DL(x) ((x)->dl) +#define DL2(x) ((x)->dl2) #define SG(x) ((x)->sugar) #define LEN(x) ((x)->len) #define LCM(x) ((x)->lcm) @@ -195,7 +198,7 @@ extern int *current_module_weight_vector; ((r)=(RHist)MALLOC(sizeof(struct oRHist)+(nd_wpd-1)*sizeof(UINT))) #define NEWND_pairs(m) \ if(!_ndp_free_list)_NDP_alloc();\ -(m)=_ndp_free_list; _ndp_free_list = NEXT(_ndp_free_list) +(m)=_ndp_free_list; (m)->zero = 0; _ndp_free_list = NEXT(_ndp_free_list) #define NEWNM(m)\ if(!_nm_free_list)_NM_alloc();\ (m)=_nm_free_list; _nm_free_list = NEXT(_nm_free_list) @@ -208,7 +211,7 @@ NV(d)=(n); LEN(d)=(len); BDY(d)=(m) #define NEWNM_ind_pair(p)\ ((p)=(NM_ind_pair)MALLOC(sizeof(struct oNM_ind_pair))) #define NEWSIG(r) \ -((r)=(SIG)MALLOC(sizeof(struct oSIG)),NEWDL((r)->dl,nd_nvar)) +((r)=(SIG)MALLOC(sizeof(struct oSIG)),NEWDL((r)->dl,nd_nvar),NEWDL((r)->dl2,nd_nvar)) /* allocate and link a new object */ #define NEXTRHist(r,c) \ @@ -219,7 +222,8 @@ if(!(r)){NEWNM(r);(c)=(r);}else{NEWNM(NEXT(c));(c)=NEX if(!(r)){(c)=(r)=(s);}else{NEXT(c)=(s);(c)=(s);} #define NEXTND_pairs(r,c) \ if(!(r)){NEWND_pairs(r);(c)=(r);}else{NEWND_pairs(NEXT(c));(c)=NEXT(c);} -#define MKNM_ind_pair(p,m,i,s) (NEWNM_ind_pair(p),(p)->mul=(m),(p)->index=(i),(p)->sugar = (s)) +#define MKNM_ind_pair(p,m,i,s,sg)\ + (NEWNM_ind_pair(p),(p)->mul=(m),(p)->index=(i),(p)->sugar = (s),(p)->sig=(sg)) /* deallocators */ #define FREENM(m) NEXT(m)=_nm_free_list; _nm_free_list=(m) @@ -277,7 +281,7 @@ NODE nd_f4(int m,int checkonly,int **indp); NODE nd_gb(int m,int ishomo,int checkonly,int gensyz,int **indp); NODE nd_gb_trace(int m,int ishomo,int **indp); NODE nd_f4_trace(int m,int **indp); -void nd_sba(LIST f,LIST v,int m,int homo,int retdp,struct order_spec *ord,LIST *rp); +void nd_sba(LIST f,LIST v,int m,int homo,int retdp,int f4,struct order_spec *ord,LIST *rp); /* ndl functions */ int ndl_weight(UINT *d); @@ -326,6 +330,7 @@ void ndp_print(ND_pairs d); /* setup, reconstruct */ void nd_init_ord(struct order_spec *spec); ND_pairs nd_reconstruct(int trace,ND_pairs ndp); +void nd_reconstruct_s(int trace,ND_pairs *ndp); int ndv_setup(int mod,int trace,NODE f,int dont_sort,int dont_removecont,int sba); void nd_setup_parameters(int nvar,int max); BlockMask nd_create_blockmask(struct order_spec *ord); @@ -409,7 +414,7 @@ int ndl_ww_lex_compare(UINT *a1,UINT *a2); #if SIZEOF_LONG == 8 int nd_to_vect64(int mod,UINT *s0,int n,ND d,mp_limb_t *r); -int ndv_reduce_vect64(int m,mp_limb_t *svect,mp_limb_t *cvect,int col,IndArray *imat,NM_ind_pair *rp0,int nred); +int ndv_reduce_vect64(int m,mp_limb_t *svect,mp_limb_t *cvect,int col,IndArray *imat,NM_ind_pair *rp0,int nred,SIG sig); NDV vect64_to_ndv(mp_limb_t *vect,int spcol,int col,int *rhead,UINT *s0vect); void red_by_vect64(int m, mp_limb_t *p,unsigned int *c,mp_limb_t *r,unsigned int hc,int len); int nd_gauss_elim_mod64(mp_limb_t **mat,int *sugar,ND_pairs *spactive,int row,int col,int md,int *colstat);