=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/nd.h,v retrieving revision 1.19 retrieving revision 1.26 diff -u -p -r1.19 -r1.26 --- OpenXM_contrib2/asir2000/engine/nd.h 2009/01/04 05:44:51 1.19 +++ OpenXM_contrib2/asir2000/engine/nd.h 2009/10/12 10:43:45 1.26 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.h,v 1.18 2006/12/14 02:49:59 noro Exp $ */ +/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.h,v 1.25 2009/02/15 03:07:41 noro Exp $ */ #include "ca.h" #include "parse.h" #include "ox.h" @@ -116,6 +116,11 @@ typedef struct oIndArray } index; } *IndArray; +typedef struct oNDVI { + NDV p; + int i; +} *NDVI; + extern int (*ndl_compare_function)(UINT *a1,UINT *a2); extern int nd_dcomp; @@ -128,11 +133,13 @@ extern char *Demand; extern VL CO; extern int Top,Reverse,DP_Print,dp_nelim,do_weyl,NoSugar; extern int *current_weyl_weight_vector; +extern int *current_module_weight_vector; /* fundamental macros */ #define TD(d) (d[0]) #define HDL(d) ((d)->body->dl) #define HTD(d) (TD(HDL(d))) +#define HCU(d) ((d)->body->c) #define HCM(d) ((d)->body->c.m) #define HCQ(d) ((d)->body->c.z) #define HCP(d) ((d)->body->c.p) @@ -240,7 +247,7 @@ ND_pairs nd_newpairs( NODE g, int t ); ND_pairs nd_minp( ND_pairs d, ND_pairs *prest ); ND_pairs nd_minsugarp( ND_pairs d, ND_pairs *prest ); NODE update_base(NODE nd,int ndp); -ND_pairs update_pairs( ND_pairs d, NODE /* of index */ g, int t); +ND_pairs update_pairs( ND_pairs d, NODE /* of index */ g, int t, int gensyz); ND_pairs equivalent_pairs( ND_pairs d1, ND_pairs *prest ); ND_pairs crit_B( ND_pairs d, int s ); ND_pairs crit_M( ND_pairs d1 ); @@ -251,15 +258,15 @@ int ndv_newps(int m,NDV a,NDV aq); /* top level functions */ void nd_gr(LIST f,LIST v,int m,int f4,struct order_spec *ord,LIST *rp); void nd_gr_trace(LIST f,LIST v,int trace,int homo,int f4,struct order_spec *ord,LIST *rp); -NODE nd_f4(int m); -NODE nd_gb(int m,int ishomo,int checkonly); -NODE nd_gb_trace(int m,int ishomo); -NODE nd_f4_trace(int m); +NODE nd_f4(int m,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); /* ndl functions */ int ndl_weight(UINT *d); void ndl_weight_mask(UINT *d); -void ndl_homogenize(UINT *d,UINT *r,int obpe,EPOS oepos,int weight); +void ndl_homogenize(UINT *d,UINT *r,int obpe,EPOS oepos,int ompos,int weight); void ndl_dehomogenize(UINT *p); void ndl_reconstruct(UINT *d,UINT *r,int obpe,EPOS oepos); INLINE int ndl_reducible(UINT *d1,UINT *d2); @@ -282,7 +289,7 @@ int nd_nf(int mod,ND d,ND g,NDV *ps,int full,NDC dn,ND int nd_nf_pbucket(int mod,ND g,NDV *ps,int full,ND *nf); /* finalizers */ -NODE ndv_reducebase(NODE x); +NODE ndv_reducebase(NODE x,int *perm); NODE ndv_reduceall(int m,NODE f); /* allocators */ @@ -302,7 +309,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 ndv_setup(int mod,int trace,NODE f,int dont_sort,int dont_removecont); +int ndv_setup(int mod,int trace,NODE f,int dont_sort,int dont_removecont); void nd_setup_parameters(int nvar,int max); BlockMask nd_create_blockmask(struct order_spec *ord); EPOS nd_create_epos(struct order_spec *ord); @@ -312,7 +319,7 @@ NDV ndv_dup(int mod,NDV p); ND nd_dup(ND p); /* ND functions */ -int ndv_check_candidate(NODE input,int obpe,int oadv,EPOS oepos,NODE cand); +int ndv_check_membership(int m,NODE input,int obpe,int oadv,EPOS oepos,NODE cand); void nd_mul_c(int mod,ND p,int mul); void nd_mul_c_q(ND p,P mul); void nd_mul_c_p(VL vl,ND p,P mul); @@ -346,7 +353,7 @@ ND ndv_mul_nm(int mod,NM m0,NDV p); ND ndv_mul_nmv_trunc(int mod,NMV m0,NDV p,UINT *d); void ndv_realloc(NDV p,int obpe,int oadv,EPOS oepos); NDV ndv_dup_realloc(NDV p,int obpe,int oadv,EPOS oepos); -void ndv_homogenize(NDV p,int obpe,int oadv,EPOS eops); +void ndv_homogenize(NDV p,int obpe,int oadv,EPOS eops,int ompos); void ndv_dehomogenize(NDV p,struct order_spec *spec); void ndv_removecont(int mod,NDV p); void ndv_print(NDV p);