=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/include/ca.h,v retrieving revision 1.4 retrieving revision 1.21 diff -u -p -r1.4 -r1.21 --- OpenXM_contrib2/asir2018/include/ca.h 2018/09/28 08:20:29 1.4 +++ OpenXM_contrib2/asir2018/include/ca.h 2022/03/30 04:58:53 1.21 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2018/include/ca.h,v 1.3 2018/09/24 22:26:43 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2018/include/ca.h,v 1.20 2021/01/25 00:39:52 noro Exp $ */ #include #include @@ -95,8 +95,13 @@ typedef caddr_t pointer; typedef void * pointer; -#if defined(sun) +#if defined(ANDROID) #include +#include +#define index(s,c) strchr(s,c) +#define rindex(s,c) strrchr(s,c) +#elif defined(sun) +#include #else #include #if defined(VISUAL) || defined(__MINGW32__) @@ -197,10 +202,10 @@ typedef unsigned _int64 UL; #endif #if defined(__GNUC__) && SIZEOF_LONG == 8 -typedef __uint64_t U64; typedef __uint128_t U128; typedef __int64_t L64; typedef __int128_t L128; + #endif typedef struct oZ { @@ -445,6 +450,7 @@ typedef struct oQUOTE { short id; short pad; pointer body; + struct oVS *pvs; } *QUOTE; typedef struct oQUOTEARG { @@ -535,6 +541,19 @@ typedef struct oDMM { struct oDMM *next; } *DMM; +typedef struct oDMMstack { + int rank,ordtype; + DMM *in; + DMM *sum; + LIST obj; + struct oDMMstack *next; +} *DMMstack; + +typedef struct oDMMstack_array { + int len; + DMMstack *body; +} *DMMstack_array; + typedef struct oDL { int td; int d[1]; @@ -598,6 +617,11 @@ typedef struct oNODE { struct oNODE *next; } *NODE; +typedef struct oNODE2 { + pointer body1,body2; + struct oNODE2 *next; +} *NODE2; + /* univariate poly over small finite field; dense */ typedef struct oUM { int d; @@ -672,11 +696,15 @@ struct order_spec { int id; Obj obj; int nv; - int ispot; /* 1 means Position over Term (Pos then Term) */ + int module_ordtype; /* 0=TOP, 1=POT, 2=wPOT, 3=Schreyer */ int pot_nelim; /* size of positions for pot-elimination order */ int *top_weight; int module_rank; int *module_top_weight; + int *module_base_ord; + struct order_spec *base; /* for schreyer order */ + DMMstack dmmstack; + int (*cmpdl)(int n,DL d1,DL d2); union { int simple; struct { @@ -804,7 +832,11 @@ void (*set_signal(int sig, void (*handler)(int)))(int) #endif /* for setjmp/longjmp compatibility */ -#if defined(__CYGWIN__) || defined(HAVE_SIGACTION) || (defined(__x86_64) && !defined(__MINGW32__)) +#if defined(ANDROID) +#define JMP_BUF jmp_buf +#define SETJMP(x) _setjmp(x) +#define LONGJMP(x,y) _longjmp(x,y) +#elif !defined(_WIN64) && (defined(__CYGWIN__) || defined(HAVE_SIGACTION) || (defined(__x86_64) && !defined(__MINGW32__))) #define JMP_BUF sigjmp_buf #define SETJMP(x) sigsetjmp(x,~0) #define LONGJMP(x,y) siglongjmp(x,y) @@ -896,6 +928,8 @@ bzero((char *)(q)->b,(w)*sizeof(unsigned int))) #define NEWVL(vl) ((vl)=(VL)MALLOC(sizeof(struct oVL))) #define NEWMP(m) ((m)=(MP)MALLOC(sizeof(struct oMP))) #define NEWDMM(m) ((m)=(DMM)MALLOC(sizeof(struct oDMM))) +#define NEWDMMstack(m) ((m)=(DMMstack)MALLOC(sizeof(struct oDMMstack))) +#define NEWDMMstack_array(m) ((m)=(DMMstack_array)MALLOC(sizeof(struct oDMMstack_array))) #define NEWDLBUCKET(a) ((a)=(DLBUCKET)MALLOC(sizeof(struct oDLBUCKET))) #define NEWDPP(a) ((a)=(DP_pairs)MALLOC(sizeof(struct dp_pairs))) @@ -932,6 +966,11 @@ DEG(DC(p))=ONE,COEF(DC(p))=(P)ONE,NEXT(DC(p))=0) DEG(DC(p))=ONE,COEF(DC(p))=(P)ONEM,NEXT(DC(p))=0) #define MKNODE(a,b,c) \ (NEWNODE(a),(a)->body=(pointer)b,NEXT(a)=(NODE)(c)) +#define NEWNODE2(a) ((a)=(NODE2)MALLOC(sizeof(struct oNODE2))) +#define MKNODE2(a,b,c,d) \ +(NEWNODE2(a),(a)->body1=(pointer)b,(a)->body2=(pointer)c,NEXT(a)=(NODE2)(d)) +#define BDY1(a) ((a)->body1) +#define BDY2(a) ((a)->body2) #define MKLIST(a,b) (NEWLIST(a),(a)->body=(NODE)(b)) #define MKVECT(m,l) \ (NEWVECT(m),(m)->len=(l),(m)->body=(pointer *)CALLOC((l),sizeof(pointer))) @@ -951,7 +990,7 @@ DEG(DC(p))=ONE,COEF(DC(p))=(P)ONEM,NEXT(DC(p))=0) #define MKMATHCAP(e,b) (NEWMATHCAP(e),(e)->body=(LIST)(b)) #define MKBYTEARRAY(m,l) \ (NEWBYTEARRAY(m),(m)->len=(l),(m)->body=(unsigned char *)MALLOC_ATOMIC((l)),bzero((m)->body,(l))) -#define MKQUOTE(q,b) (NEWQUOTE(q),(q)->body=(pointer)(b)) +#define MKQUOTE(q,b) (NEWQUOTE(q),(q)->body=(pointer)(b),(q)->pvs=CPVS) #define MKQUOTEARG(q,t,b) (NEWQUOTEARG(q),(q)->type=(t),(q)->body=(pointer)(b)) #define NEXTDC(r,c) \ @@ -978,8 +1017,8 @@ if(!(r)){NEWDMM(r);(c)=(r);}else{NEWDMM(NEXT(c));(c)=N #define DUPZ(p,q) (NEWZ(q),BDY(q)=BDY(p)) #define DUPQ(p,q) (NEWQ(q),BDY(q)=BDY(p)) -#define STOZ(n,q) ((!(n))?((q)=0):(NEWZ(q),mpz_set_si(BDY(q),n))) -#define UTOZ(n,q) ((!(n))?((q)=0):(NEWZ(q),mpz_set_ui(BDY(q),n))) +#define STOZ(n,q) ((!(n))?(void)((q)=0):(NEWZ(q),mpz_set_si(BDY(q),n))) +#define UTOZ(n,q) ((!(n))?(void)((q)=0):(NEWZ(q),mpz_set_ui(BDY(q),n))) /* for initializing static object */ #define STOZ0(n,q) (OID(q)=O_N,NID(q)=N_Q,(q)->z=1,mpz_init(BDY(q)),mpz_set_si(BDY(q),n)) @@ -1021,6 +1060,8 @@ if(!(r)){NEWDMM(r);(c)=(r);}else{NEWDMM(NEXT(c));(c)=N #define UNIMQ(q) ((q)&&NUM(q)&&SFF(q)&&(CONT((MQ)q)==1)) #define MUNIMQ(q) ((q)&&NUM(q)&&SFF(q)&&(CONT((MQ)q)==-1)) #define EVENZ(n) ((!(n))||(INT(n)&&mpz_tstbit(((Z)(n))->body,0)==0)) +#define UNIMPZ(q) (mpz_cmp_si(q,1)==0) +#define MUNIMPZ(q) (mpz_cmp_si(q,-1)==0) /* special macros for private memory management */ @@ -1426,17 +1467,16 @@ int divcheck(VL,P *,int,P,P); int divtdcpz(VL,P,P,P *); int divtpz(VL,P,P,P *); int divum(register int,UM,UM,UM); -int dm(int,int,int *); -int dmb(int,int,int,int *); -int dma(int,int,int,int *); -int dmab(int,int,int,int,int *); -int dmar(int,int,int,int); +unsigned int dm(unsigned int,unsigned int,unsigned int *); +unsigned int dmb(unsigned int,unsigned int,unsigned int,unsigned int *); +unsigned int dma(unsigned int,unsigned int,unsigned int,unsigned int *); +unsigned int dmab(unsigned int,unsigned int,unsigned int,unsigned int,unsigned int *); +unsigned int dmar(unsigned int,unsigned int,unsigned int,unsigned int); int dtestmain(P,Q,ML,int,int *,P *,P *); int geldb(VL,P); int getchomdeg(V,P); int getdeg(V,P); int getlchomdeg(V,P,int *); -int get_lprime(int); int homdeg(P); unsigned int invm(unsigned int,int); int iscycm(P); @@ -1775,6 +1815,7 @@ void vntovl(VN,int,VL *); void saveerror(FILE *,ERR); void saveui(FILE *,USINT); void savedp(FILE *,DP); +void savedpm(FILE *,DPM); void savestring(FILE *,STRING); void savemat(FILE *,MAT); void savevect(FILE *,VECT); @@ -1800,6 +1841,7 @@ void savegfsn(FILE *,GFSN); void loaderror(FILE *,ERR *); void loadui(FILE *,USINT *); void loaddp(FILE *,DP *); +void loaddpm(FILE *,DPM *); void loadstring(FILE *,STRING *); void loadmat(FILE *,MAT *); void loadvect(FILE *,VECT *); @@ -2620,7 +2662,7 @@ void nd_det(int mod,MAT f,P *rp); void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int f4,struct order_spec *ord,LIST *rp); void nd_gr_postproc(LIST f,LIST v,int m,struct order_spec *ord,int do_check,LIST *rp); void nd_gr_recompute_trace(LIST f,LIST v,int m,struct order_spec *ord,LIST tlist,LIST *rp); -void nd_gr_trace(LIST f,LIST v,int trace,int homo,int f4,struct order_spec *ord,LIST *rp); +void nd_gr_trace(LIST f,LIST v,int trace,int homo,int retdp,int f4,struct order_spec *ord,LIST *rp); void nd_nf_p(Obj f,LIST g,LIST v,int m,struct order_spec *ord,Obj *rp); void obj_algtodalg(Obj obj,Obj *r); void obj_dalgtoalg(Obj obj,Obj *r); @@ -2690,6 +2732,14 @@ void hextoz(char *hex,Z *np); void todouble(Obj,Obj *); void lmtolf(LM f,Z *b); + +#if SIZEOF_LONG == 8 +mp_limb_t get_lprime64(int index); +mp_limb_t **almat64(int,int); +mp_limb_t remqi64(Q n,mp_limb_t m); +int generic_gauss_elim64(MAT mat,MAT *nm,Z *dn,int **rindp,int **cindp); +int generic_gauss_elim_mod64(mp_limb_t **mat,int row,int col,mp_limb_t md,int *colstat); +#endif #if defined(VISUAL) || defined(__MINGW32__) void check_intr();