=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/parse/parse.h,v retrieving revision 1.6 retrieving revision 1.8 diff -u -p -r1.6 -r1.8 --- OpenXM_contrib2/asir2018/parse/parse.h 2019/11/12 07:47:45 1.6 +++ 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.5 2019/09/04 01:12:02 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 { @@ -311,7 +314,32 @@ switch ( id ) {\ :PVATTR(i)==2?(long)(MPVS->va[PVIND(i)].priv=(pointer)(p))\ :(long)(PPVS->va[PVIND(i)].priv=(pointer)(p))) +#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; @@ -534,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 **); @@ -774,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); @@ -815,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);