version 1.12, 2003/04/08 22:29:00 |
version 1.13, 2015/08/04 06:20:45 |
|
|
* OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY |
* OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* $OpenXM: OpenXM_contrib2/asir2000/io/cio.c,v 1.11 2001/10/09 01:36:20 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/io/cio.c,v 1.12 2003/04/08 22:29:00 ohara Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
|
|
int valid_as_cmo(Obj obj) |
int valid_as_cmo(Obj obj) |
{ |
{ |
NODE m; |
NODE m; |
|
int nid; |
|
|
if ( !obj ) |
if ( !obj ) |
return 1; |
return 1; |
Line 66 int valid_as_cmo(Obj obj) |
|
Line 67 int valid_as_cmo(Obj obj) |
|
case O_ERR: case O_USINT: case O_BYTEARRAY: case O_VOID: |
case O_ERR: case O_USINT: case O_BYTEARRAY: case O_VOID: |
return 1; |
return 1; |
case O_N: |
case O_N: |
if ( NID((Num)obj) == N_Q || NID((Num)obj) == N_R ) |
nid = NID((Num)obj); |
|
if ( nid == N_Q || nid == N_R || nid == N_B ) |
return 1; |
return 1; |
else |
else |
return 0; |
return 0; |
Line 101 void write_cmo(FILE *s,Obj obj) |
|
Line 103 void write_cmo(FILE *s,Obj obj) |
|
case N_R: |
case N_R: |
write_cmo_real(s,(Real)obj); |
write_cmo_real(s,(Real)obj); |
break; |
break; |
|
case N_B: |
|
write_cmo_bf(s,(BF)obj); |
|
break; |
default: |
default: |
sprintf(errmsg, "write_cmo : number id=%d not implemented.", |
sprintf(errmsg, "write_cmo : number id=%d not implemented.", |
NID((Num)obj)); |
NID((Num)obj)); |
Line 164 int cmo_tag(Obj obj,int *tag) |
|
Line 169 int cmo_tag(Obj obj,int *tag) |
|
*tag = DN((Q)obj) ? CMO_QQ : CMO_ZZ; break; |
*tag = DN((Q)obj) ? CMO_QQ : CMO_ZZ; break; |
case N_R: |
case N_R: |
*tag = CMO_IEEE_DOUBLE_FLOAT; break; |
*tag = CMO_IEEE_DOUBLE_FLOAT; break; |
|
case N_B: |
|
*tag = CMO_BIGFLOAT; break; |
default: |
default: |
return 0; |
return 0; |
} |
} |
Line 231 void write_cmo_real(FILE *s,Real real) |
|
Line 238 void write_cmo_real(FILE *s,Real real) |
|
dbl = real->body; write_double(s,&dbl); |
dbl = real->body; write_double(s,&dbl); |
} |
} |
|
|
|
void write_cmo_bf(FILE *s,BF bf) |
|
{ |
|
unsigned int r; |
|
int len,t; |
|
L exp; |
|
|
|
r = CMO_BIGFLOAT; write_int(s,&r); |
|
write_int(s,&MPFR_SIGN(bf->body)); |
|
write_int(s,&MPFR_PREC(bf->body)); |
|
exp = MPFR_EXP(bf->body); |
|
write_int64(s,&exp); |
|
len = MPFR_LIMB_SIZE(bf->body); |
|
write_int(s,&len); |
|
#if SIZEOF_LONG == 4 |
|
write_intarray(s,MPFR_MANT(bf->body),len); |
|
#else /* SIZEOF_LONG == 8 */ |
|
t = 2*len; |
|
write_int(s,&t); |
|
write_longarray(s,MPFR_MANT(bf->body),len); |
|
#endif |
|
} |
|
|
void write_cmo_zz(FILE *s,int sgn,N n) |
void write_cmo_zz(FILE *s,int sgn,N n) |
{ |
{ |
int l,bytes; |
int l,bytes; |
Line 438 void read_cmo(FILE *s,Obj *rp) |
|
Line 467 void read_cmo(FILE *s,Obj *rp) |
|
DP dp; |
DP dp; |
Obj obj; |
Obj obj; |
ERR e; |
ERR e; |
|
BF bf; |
MATHCAP mc; |
MATHCAP mc; |
BYTEARRAY array; |
BYTEARRAY array; |
LIST list; |
LIST list; |
Line 486 void read_cmo(FILE *s,Obj *rp) |
|
Line 516 void read_cmo(FILE *s,Obj *rp) |
|
case CMO_IEEE_DOUBLE_FLOAT: |
case CMO_IEEE_DOUBLE_FLOAT: |
read_double(s,&dbl); MKReal(dbl,real); *rp = (Obj)real; |
read_double(s,&dbl); MKReal(dbl,real); *rp = (Obj)real; |
break; |
break; |
|
case CMO_BIGFLOAT: |
|
read_cmo_bf(s,&bf); *rp = (Obj)bf; |
|
break; |
case CMO_DISTRIBUTED_POLYNOMIAL: |
case CMO_DISTRIBUTED_POLYNOMIAL: |
read_cmo_dp(s,&dp); *rp = (Obj)dp; |
read_cmo_dp(s,&dp); *rp = (Obj)dp; |
break; |
break; |
Line 579 void read_cmo_zz(FILE *s,int *sgn,N *rp) |
|
Line 612 void read_cmo_zz(FILE *s,int *sgn,N *rp) |
|
b[i] = h; |
b[i] = h; |
} |
} |
#endif |
#endif |
|
} |
|
|
|
void read_cmo_bf(FILE *s,BF *bf) |
|
{ |
|
BF r; |
|
int sgn,prec,len; |
|
L exp; |
|
|
|
NEWBF(r); |
|
read_int(s,&sgn); |
|
read_int(s,&prec); |
|
read_int64(s,&exp); |
|
read_int(s,&len); |
|
mpfr_init2(r->body,prec); |
|
MPFR_SIGN(r->body) = sgn; |
|
MPFR_EXP(r->body) = exp; |
|
#if SIZEOF_LONG == 4 |
|
read_intarray(s,MPFR_MANT(r->body),len); |
|
#else /* SIZEOF_LONG == 8 */ |
|
read_longarray(s,MPFR_MANT(r->body),len>>1); |
|
#endif |
|
*bf = r; |
} |
} |
|
|
void read_cmo_list(FILE *s,Obj *rp) |
void read_cmo_list(FILE *s,Obj *rp) |