=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/parse/parse.h,v retrieving revision 1.3 retrieving revision 1.8 diff -u -p -r1.3 -r1.8 --- OpenXM_contrib2/asir2018/parse/parse.h 2019/03/28 05:38:07 1.3 +++ OpenXM_contrib2/asir2018/parse/parse.h 2020/02/22 06:23:36 1.8 @@ -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/parse/parse.h,v 1.2 2019/03/28 05:28:33 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2018/parse/parse.h,v 1.7 2019/11/12 10:53:23 kondoh Exp $ */ # if defined(VISUAL) || defined(__MINGW32__) #include @@ -184,6 +184,9 @@ typedef struct oPF { int (*pari)(); double (*libm)(); int (*simplify)(); +#if defined(INTERVAL) + void (**intervalfunc)(); +#endif } *PF; typedef struct oPFAD { @@ -223,11 +226,6 @@ typedef struct oPVI { NODE index; } *PVI; -typedef struct oNODE2 { - pointer body1,body2; - struct oNODE2 *next; -} *NODE2; - struct ftab { char *name; void (*f)(); @@ -316,12 +314,32 @@ switch ( id ) {\ :PVATTR(i)==2?(long)(MPVS->va[PVIND(i)].priv=(pointer)(p))\ :(long)(PPVS->va[PVIND(i)].priv=(pointer)(p))) -#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 GETPV2(i,p,pvs) \ +(PVATTR(i)==0?(long)((p)=pvs->va[(unsigned int)(i)].priv)\ + :PVATTR(i)==1?(long)((p)=GPVS->va[PVIND(i)].priv)\ + :PVATTR(i)==2?(long)((p)=MPVS->va[PVIND(i)].priv)\ + :(long)((p)=PPVS->va[PVIND(i)].priv)) +#define GETPVREF2(i,p,pvs) \ +(PVATTR(i)==0?(long)((p)=&(pvs->va[(unsigned long)(i)].priv))\ + :PVATTR(i)==1?(long)((p)=&(GPVS->va[PVIND(i)].priv))\ + :PVATTR(i)==2?(long)((p)=&(MPVS->va[PVIND(i)].priv))\ + :(long)((p)=&(PPVS->va[PVIND(i)].priv))) + +#define GETPVNAME2(i,p,pvs) \ +(PVATTR(i)==0?(long)((p)=pvs->va[(unsigned long)(i)].name)\ + :PVATTR(i)==1?(long)((p)=GPVS->va[PVIND(i)].name)\ + :PVATTR(i)==2?(long)((p)=MPVS->va[PVIND(i)].name)\ + :(long)((p)=PPVS->va[PVIND(i)].name)) + +#define ASSPV2(i,p,pvs) \ +(PVATTR(i)==0?(long)(pvs->va[(unsigned long)(i)].priv=(pointer)(p))\ + :PVATTR(i)==1?(long)(GPVS->va[PVIND(i)].priv=(pointer)(p))\ + :PVATTR(i)==2?(long)(MPVS->va[PVIND(i)].priv=(pointer)(p))\ + :(long)(PPVS->va[PVIND(i)].priv=(pointer)(p))) + + + extern VS GPVS,CPVS,EPVS,APVS,MPVS,PPVS; extern MODULE CUR_MODULE; extern NODE MODULE_LIST; @@ -379,10 +397,10 @@ void dp_dtov(DP,VECT *); void dp_cont(DP,Z *); void dp_idiv(DP,Z,DP *); void dtodpm(DP d,int pos,DPM *dp); -void dpm_nf_z(NODE b,DPM g,DPM *ps,int full,int multiple,DPM *rp); -void dpm_nf_f(NODE b,DPM g,DPM *ps,int full,DPM *rp); +void dpm_nf_z(NODE b,DPM g,VECT ps,int full,int multiple,DPM *rp); +void dpm_nf_f(NODE b,DPM g,VECT ps,int full,DPM *rp); void weyl_actd(VL vl,DP p1,DP p2,DP *pr); -void dpm_sp(DPM p1,DPM p2,DPM *rp); +void dpm_sp(DPM p1,DPM p2,DPM *rp,DP *mul1,DP *mul2); void initdpm(struct order_spec *spec,int type); void dpm_ht(DPM p,DPM *rp); void dpm_hm(DPM p,DPM *rp); @@ -544,7 +562,11 @@ void getmemberp(FNODE,Obj **); void help(char *); void instov(PFINS ,V *); Obj memberofstruct(COMP,char *); -void mkpf(char *,Obj ,int ,V *,int (*)(),double (*)(),int (*)(),PF *); +#if defined(INTERVAL) +void mkpf(char *,Obj ,int ,V *,int (*)(),double (*)(),int (*)(),void (*[])(), PF *); +#else +void mkpf(char *,Obj ,int ,V *,int (*)(),double (*)(),int (*)(), PF *); +#endif void mkpfins(PF ,V *,V *); void mkuf(char *,char *,NODE,SNODE,int,int,char *,MODULE); void newstruct(int,struct oCOMP **); @@ -784,7 +806,7 @@ void dptoquote(DP a,QUOTE *c); void dctoquote(DCP dc,QUOTE v,QUOTE *c,int *sgn); void mptoquote(MP m,int n,QUOTE *c,int *sgn); void vartoquote(V v,QUOTE *c); -void fnodetotree(FNODE f,LIST *rp); +void fnodetotree(FNODE f,VS vs,LIST *rp); int compfnode(FNODE f1,FNODE f2); FNODE eval_pvar_in_fnode(FNODE f); FNODE subst_in_fnode(FNODE f,V v,FNODE g); @@ -825,8 +847,13 @@ void show_debug_window(int on); void init_cmdwin(); void searchpf(char *name,FUNC *fp); void searchc(char *name,FUNC *fp); +#if defined(INTERVAL) void mkpf(char *name,Obj body,int argc,V *args, - int (*parif)(),double (*libmf)(), int (*simp)(),PF *pfp); + int (*parif)(),double (*libmf)(), int (*simp)(), void (*intervalfunc[])(), PF *pfp); +#else +void mkpf(char *name,Obj body,int argc,V *args, + int (*parif)(),double (*libmf)(), int (*simp)(), PF *pfp); +#endif void mkpfins(PF pf,V *args,V *vp); void _mkpfins(PF pf,Obj *args,V *vp); void _mkpfins_with_darray(PF pf,Obj *args,int *darray,V *vp);