=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/cio.c,v retrieving revision 1.14 retrieving revision 1.18 diff -u -p -r1.14 -r1.18 --- OpenXM_contrib2/asir2000/io/cio.c 2015/08/04 10:19:31 1.14 +++ OpenXM_contrib2/asir2000/io/cio.c 2015/08/13 00:13:03 1.18 @@ -44,12 +44,12 @@ * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. - * $OpenXM: OpenXM_contrib2/asir2000/io/cio.c,v 1.13 2015/08/04 06:20:45 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/io/cio.c,v 1.17 2015/08/12 10:45:12 noro Exp $ */ #include "ca.h" #include "parse.h" #include "ox.h" -#if !defined(VISUAL) +#if !defined(VISUAL) && !defined(__MINGW32__) && !defined(__MINGW64__) #include #endif @@ -147,6 +147,9 @@ void write_cmo(FILE *s,Obj obj) fnodetotree(BDY((QUOTE)obj),&l); write_cmo_tree(s,l); break; + case O_MAT: + write_cmo_matrix_as_list(s,(MAT)obj); + break; default: sprintf(errmsg, "write_cmo : id=%d not implemented.",OID(obj)); error(errmsg); @@ -247,7 +250,7 @@ void write_cmo_bf(FILE *s,BF bf) r = CMO_BIGFLOAT; write_int(s,&r); write_int(s,&MPFR_SIGN(bf->body)); - write_int(s,&MPFR_PREC(bf->body)); + write_int(s,(unsigned int *)&MPFR_PREC(bf->body)); exp = MPFR_EXP(bf->body); write_int64(s,&exp); len = MPFR_LIMB_SIZE(bf->body); @@ -255,15 +258,9 @@ void write_cmo_bf(FILE *s,BF bf) write_int(s,&len); write_intarray(s,MPFR_MANT(bf->body),len); #else /* SIZEOF_LONG == 8 */ - t = 2*len; + t = (MPFR_PREC(bf->body)+31)/32; write_int(s,&t); - ptr = (UL *)MPFR_MANT(bf->body); - for ( i = 0; i < len; i++ ) { - u = ptr[i]>>32; - l = ptr[i]&0xffffffff; - write_int(s,&u); - write_int(s,&l); - } + write_longarray(s,MPFR_MANT(bf->body),t); #endif } @@ -460,6 +457,23 @@ void write_cmo_tree(FILE *s,LIST l) } } +void write_cmo_matrix_as_list(FILE *s,MAT a) +{ + int i,j,r,row,col; + + /* CMO_LIST row (CMO_LIST col a[0][0] ... a[0][col-1]) ... (CMO_LIST col a[row-1][0] ... a[row-1][col-1] */ + row = a->row; col = a->col; + r = CMO_LIST; + write_int(s,&r); + write_int(s,&row); + for ( i = 0; i < row; i++ ) { + write_int(s,&r); + write_int(s,&col); + for ( j = 0; j < col; j++ ) + write_cmo(s,a->body[i][j]); + } +} + void read_cmo(FILE *s,Obj *rp) { int id; @@ -640,13 +654,7 @@ void read_cmo_bf(FILE *s,BF *bf) #if SIZEOF_LONG == 4 read_intarray(s,MPFR_MANT(r->body),len); #else /* SIZEOF_LONG == 8 */ - len >>= 1; - ptr = (UL *)MPFR_MANT(r->body); - for ( i = 0; i < len; i++ ) { - read_int(s,&u); - read_int(s,&l); - ptr[i] = ((UL)u)<<32|((UL)l)&0xffffffff; - } + read_longarray(s,MPFR_MANT(r->body),len); #endif *bf = r; }