version 1.2, 2019/08/28 23:27:34 |
version 1.3, 2020/10/06 06:31:20 |
|
|
* 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/asir2018/io/bsave.c,v 1.1 2018/09/19 05:45:08 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2018/io/bsave.c,v 1.2 2019/08/28 23:27:34 noro Exp $ |
*/ |
*/ |
/* saveXXX must not use GC_malloc(), GC_malloc_atomic(). */ |
/* saveXXX must not use GC_malloc(), GC_malloc_atomic(). */ |
|
|
Line 71 static short zeroval = 0; |
|
Line 71 static short zeroval = 0; |
|
void saveobj(FILE *s,Obj p) |
void saveobj(FILE *s,Obj p) |
{ |
{ |
if ( !p ) |
if ( !p ) |
write_short(s,&zeroval); |
write_short(s,(unsigned short *)&zeroval); |
else if ( !savef[OID(p)] ) |
else if ( !savef[OID(p)] ) |
error("saveobj : not implemented"); |
error("saveobj : not implemented"); |
else |
else |
Line 85 void savenum(FILE *s,Num p) |
|
Line 85 void savenum(FILE *s,Num p) |
|
if ( !nsavef[NID(p)] ) |
if ( !nsavef[NID(p)] ) |
error("savenum : not implemented"); |
error("savenum : not implemented"); |
else { |
else { |
write_short(s,&OID(p)); write_char(s,&NID(p)); |
write_short(s,(unsigned short *)&OID(p)); write_char(s,(unsigned char *)&NID(p)); |
if ( NID(p) == N_Q ) { |
if ( NID(p) == N_Q ) { |
sgn = sgnq((Q)p); |
sgn = sgnq((Q)p); |
write_char(s,&sgn); |
write_char(s,(unsigned char *)&sgn); |
} else |
} else |
write_char(s,&(p->pad)); |
write_char(s,(unsigned char *)&(p->pad)); |
(*nsavef[NID(p)])(s,p); |
(*nsavef[NID(p)])(s,p); |
} |
} |
} |
} |
Line 107 void saveq(FILE *s,Q p) |
|
Line 107 void saveq(FILE *s,Q p) |
|
bnm = (int *)mpz_export(0,&lnm,-1,sizeof(int),0,0,BDY((Z)p)); |
bnm = (int *)mpz_export(0,&lnm,-1,sizeof(int),0,0,BDY((Z)p)); |
size[0] = lnm; |
size[0] = lnm; |
size[1] = 0; |
size[1] = 0; |
write_intarray(s,size,len); |
write_intarray(s,(unsigned int *)size,len); |
write_intarray(s,bnm,size[0]); |
write_intarray(s,(unsigned int *)bnm,size[0]); |
} else { |
} else { |
nmq(p,&nm); |
nmq(p,&nm); |
bnm = (int *)mpz_export(0,&lnm,-1,sizeof(int),0,0,BDY(nm)); |
bnm = (int *)mpz_export(0,&lnm,-1,sizeof(int),0,0,BDY(nm)); |
Line 116 void saveq(FILE *s,Q p) |
|
Line 116 void saveq(FILE *s,Q p) |
|
bdn = (int *)mpz_export(0,&ldn,-1,sizeof(int),0,0,BDY(dn)); |
bdn = (int *)mpz_export(0,&ldn,-1,sizeof(int),0,0,BDY(dn)); |
size[0] = lnm; |
size[0] = lnm; |
size[1] = ldn; |
size[1] = ldn; |
write_intarray(s,size,len); |
write_intarray(s,(unsigned int *)size,len); |
write_intarray(s,bnm,size[0]); |
write_intarray(s,(unsigned int *)bnm,size[0]); |
write_intarray(s,bdn,size[1]); |
write_intarray(s,(unsigned int *)bdn,size[1]); |
} |
} |
} |
} |
|
|
Line 142 void savebf(FILE *s,BF p) |
|
Line 142 void savebf(FILE *s,BF p) |
|
sgn = MPFR_SIGN(p->body); |
sgn = MPFR_SIGN(p->body); |
len = MPFR_LIMB_SIZE(p->body); |
len = MPFR_LIMB_SIZE(p->body); |
|
|
write_int(s,&sgn); |
write_int(s,(unsigned int *)&sgn); |
write_int(s,(int *)&prec); |
write_int(s,&prec); |
write_int64(s,(UL *)&exp); |
write_int64(s,(UL *)&exp); |
#if defined(VISUAL) |
#if defined(VISUAL) |
#if !defined(_WIN64) |
#if !defined(_WIN64) |
write_int(s,&len); |
write_int(s,(unsigned int *)&len); |
write_intarray(s,p->body->_mpfr_d,len); |
write_intarray(s,p->body->_mpfr_d,len); |
#else |
#else |
t = (prec+31)/32; |
t = (prec+31)/32; |
write_int(s,&t); |
write_int(s,(unsigned int *)&t); |
write_longarray(s,(long long *)p->body->_mpfr_d,t); |
write_longarray(s,(long long *)p->body->_mpfr_d,t); |
#endif |
#endif |
#else |
#else |
#if SIZEOF_LONG == 4 |
#if SIZEOF_LONG == 4 |
write_int(s,&len); |
write_int(s,(unsigned int *)&len); |
write_intarray(s,p->body->_mpfr_d,len); |
write_intarray(s,p->body->_mpfr_d,len); |
#else /* SIZEOF_LONG == 8 */ |
#else /* SIZEOF_LONG == 8 */ |
t = (prec+31)/32; |
t = (prec+31)/32; |
write_int(s,&t); |
write_int(s,(unsigned int *)&t); |
write_longarray(s,p->body->_mpfr_d,t); |
write_longarray(s,p->body->_mpfr_d,t); |
#endif |
#endif |
#endif |
#endif |
Line 184 void savecplx(FILE *s,C p) |
|
Line 184 void savecplx(FILE *s,C p) |
|
{ saveobj(s,(Obj)p->r); saveobj(s,(Obj)p->i); } |
{ saveobj(s,(Obj)p->r); saveobj(s,(Obj)p->i); } |
|
|
void savemi(FILE *s,MQ p) |
void savemi(FILE *s,MQ p) |
{ write_int(s,&CONT(p)); } |
{ write_int(s,(unsigned int *)&CONT(p)); } |
|
|
void savelm(FILE *s,LM p) |
void savelm(FILE *s,LM p) |
{ |
{ |
Line 194 void savelm(FILE *s,LM p) |
|
Line 194 void savelm(FILE *s,LM p) |
|
|
|
b = (int *)mpz_export(0,&l,-1,sizeof(int),0,0,BDY(p)); |
b = (int *)mpz_export(0,&l,-1,sizeof(int),0,0,BDY(p)); |
size = l; |
size = l; |
write_int(s,&size); |
write_int(s,(unsigned int *)&size); |
write_intarray(s,b,size); |
write_intarray(s,(unsigned int *)b,size); |
} |
} |
|
|
void savegf2n(FILE *s,GF2N p) |
void savegf2n(FILE *s,GF2N p) |
Line 203 void savegf2n(FILE *s,GF2N p) |
|
Line 203 void savegf2n(FILE *s,GF2N p) |
|
int len; |
int len; |
|
|
len = p->body->w; |
len = p->body->w; |
write_int(s,&len); |
write_int(s,(unsigned int *)&len); |
write_intarray(s,p->body->b,len); |
write_intarray(s,p->body->b,len); |
} |
} |
|
|
Line 212 void savegfpn(FILE *s,GFPN p) |
|
Line 212 void savegfpn(FILE *s,GFPN p) |
|
int d,i; |
int d,i; |
|
|
d = p->body->d; |
d = p->body->d; |
write_int(s,&d); |
write_int(s,(unsigned int *)&d); |
for ( i = 0; i <= d; i++ ) |
for ( i = 0; i <= d; i++ ) |
saveobj(s,(Obj)p->body->c[i]); |
saveobj(s,(Obj)p->body->c[i]); |
} |
} |
|
|
void savegfs(FILE *s,GFS p) |
void savegfs(FILE *s,GFS p) |
{ write_int(s,&CONT(p)); } |
{ write_int(s,(unsigned int *)&CONT(p)); } |
|
|
void savegfsn(FILE *s,GFSN p) |
void savegfsn(FILE *s,GFSN p) |
{ |
{ |
int d; |
int d; |
|
|
d = DEG(BDY(p)); |
d = DEG(BDY(p)); |
write_int(s,&d); |
write_int(s,(unsigned int *)&d); |
write_intarray(s,COEF(BDY(p)),d+1); |
write_intarray(s,(unsigned int *)COEF(BDY(p)),d+1); |
} |
} |
|
|
void savedalg(FILE *s,DAlg p) |
void savedalg(FILE *s,DAlg p) |
Line 246 void savep(FILE *s,P p) |
|
Line 246 void savep(FILE *s,P p) |
|
else { |
else { |
vindex = save_convv(VR(p)); |
vindex = save_convv(VR(p)); |
for ( dc = DC(p), n = 0; dc; dc = NEXT(dc), n++ ); |
for ( dc = DC(p), n = 0; dc; dc = NEXT(dc), n++ ); |
write_short(s,&OID(p)); |
write_short(s,(unsigned short *)&OID(p)); |
write_int(s,&vindex); |
write_int(s,(unsigned int *)&vindex); |
if ( vindex < 0 ) |
if ( vindex < 0 ) |
savepfins(s,VR(p)); |
savepfins(s,VR(p)); |
write_int(s,&n); |
write_int(s,(unsigned int *)&n); |
for ( dc = DC(p); dc; dc = NEXT(dc) ) { |
for ( dc = DC(p); dc; dc = NEXT(dc) ) { |
saveobj(s,(Obj)DEG(dc)); saveobj(s,(Obj)COEF(dc)); |
saveobj(s,(Obj)DEG(dc)); saveobj(s,(Obj)COEF(dc)); |
} |
} |
Line 271 void savepfins(FILE *s,V v) |
|
Line 271 void savepfins(FILE *s,V v) |
|
pf = ins->pf; |
pf = ins->pf; |
savestr(s,NAME(pf)); |
savestr(s,NAME(pf)); |
argc = pf->argc; |
argc = pf->argc; |
write_int(s,&argc); |
write_int(s,(unsigned int *)&argc); |
darray = (int *)ALLOCA(argc*sizeof(int)); |
darray = (int *)ALLOCA(argc*sizeof(int)); |
for ( i = 0; i < argc; i++ ) |
for ( i = 0; i < argc; i++ ) |
darray[i] = ins->ad[i].d; |
darray[i] = ins->ad[i].d; |
write_intarray(s,darray,argc); |
write_intarray(s,(unsigned int *)darray,argc); |
for ( i = 0; i < argc; i++ ) |
for ( i = 0; i < argc; i++ ) |
saveobj(s,ins->ad[i].arg); |
saveobj(s,ins->ad[i].arg); |
} |
} |
Line 285 void saver(FILE *s,R p) |
|
Line 285 void saver(FILE *s,R p) |
|
if ( !RAT(p) ) |
if ( !RAT(p) ) |
savep(s,(P)p); |
savep(s,(P)p); |
else { |
else { |
write_short(s,&OID(p)); write_short(s,&p->reduced); |
write_short(s,(unsigned short *)&OID(p)); write_short(s,(unsigned short *)&p->reduced); |
savep(s,NM(p)); savep(s,DN(p)); |
savep(s,NM(p)); savep(s,DN(p)); |
} |
} |
} |
} |
Line 296 void savelist(FILE *s,LIST p) |
|
Line 296 void savelist(FILE *s,LIST p) |
|
NODE tn; |
NODE tn; |
|
|
for ( tn = BDY(p), n = 0; tn; tn = NEXT(tn), n++ ); |
for ( tn = BDY(p), n = 0; tn; tn = NEXT(tn), n++ ); |
write_short(s,&OID(p)); write_int(s,&n); |
write_short(s,(unsigned short *)&OID(p)); write_int(s,(unsigned int *)&n); |
for ( tn = BDY(p); tn; tn = NEXT(tn) ) |
for ( tn = BDY(p); tn; tn = NEXT(tn) ) |
saveobj(s,(Obj)BDY(tn)); |
saveobj(s,(Obj)BDY(tn)); |
} |
} |
Line 305 void savevect(FILE *s,VECT p) |
|
Line 305 void savevect(FILE *s,VECT p) |
|
{ |
{ |
int i,len = 2; |
int i,len = 2; |
|
|
write_short(s,&OID(p)); write_int(s,&p->len); |
write_short(s,(unsigned short *)&OID(p)); write_int(s,(unsigned int *)&p->len); |
for ( i = 0, len = p->len; i < len; i++ ) |
for ( i = 0, len = p->len; i < len; i++ ) |
saveobj(s,(Obj)BDY(p)[i]); |
saveobj(s,(Obj)BDY(p)[i]); |
} |
} |
Line 315 void savemat(FILE *s,MAT p) |
|
Line 315 void savemat(FILE *s,MAT p) |
|
int i,j,row,col; |
int i,j,row,col; |
int len = 3; |
int len = 3; |
|
|
write_short(s,&OID(p)); write_int(s,&p->row); write_int(s,&p->col); |
write_short(s,(unsigned short *)&OID(p)); write_int(s,(unsigned int *)&p->row); write_int(s,(unsigned int *)&p->col); |
for ( i = 0, row = p->row, col = p->col; i < row; i++ ) |
for ( i = 0, row = p->row, col = p->col; i < row; i++ ) |
for ( j = 0; j < col; j++ ) |
for ( j = 0; j < col; j++ ) |
saveobj(s,(Obj)BDY(p)[i][j]); |
saveobj(s,(Obj)BDY(p)[i][j]); |
Line 323 void savemat(FILE *s,MAT p) |
|
Line 323 void savemat(FILE *s,MAT p) |
|
|
|
void savestring(FILE *s,STRING p) |
void savestring(FILE *s,STRING p) |
{ |
{ |
write_short(s,&OID(p)); savestr(s,BDY(p)); |
write_short(s,(unsigned short *)&OID(p)); savestr(s,BDY(p)); |
} |
} |
|
|
void savestr(FILE *s,char *p) |
void savestr(FILE *s,char *p) |
{ |
{ |
int size; |
int size; |
|
|
size = p ? strlen(p) : 0; write_int(s,&size); |
size = p ? strlen(p) : 0; write_int(s,(unsigned int *)&size); |
if ( size ) |
if ( size ) |
write_string(s,p,size); |
write_string(s,(unsigned char *)p,size); |
} |
} |
|
|
void savedp(FILE *s,DP p) |
void savedp(FILE *s,DP p) |
Line 342 void savedp(FILE *s,DP p) |
|
Line 342 void savedp(FILE *s,DP p) |
|
|
|
nv = p->nv; m = p->body; sugar = p->sugar; |
nv = p->nv; m = p->body; sugar = p->sugar; |
for ( n = 0, t = m; t; t = NEXT(t), n++ ); |
for ( n = 0, t = m; t; t = NEXT(t), n++ ); |
write_short(s,&OID(p)); write_int(s,&nv); write_int(s,&sugar); write_int(s,&n); |
write_short(s,(unsigned short *)&OID(p)); write_int(s,(unsigned int *)&nv); write_int(s,(unsigned int *)&sugar); write_int(s,(unsigned int *)&n); |
for ( i = 0, t = m; i < n; i++, t = NEXT(t) ) { |
for ( i = 0, t = m; i < n; i++, t = NEXT(t) ) { |
saveobj(s,(Obj)t->c); |
saveobj(s,(Obj)t->c); |
write_int(s,&t->dl->td); write_intarray(s,&(t->dl->d[0]),nv); |
write_int(s,(unsigned int *)&t->dl->td); write_intarray(s,(unsigned int *)&(t->dl->d[0]),nv); |
} |
} |
} |
} |
|
|
Line 356 void savedpm(FILE *s,DPM p) |
|
Line 356 void savedpm(FILE *s,DPM p) |
|
|
|
nv = p->nv; m = p->body; sugar = p->sugar; |
nv = p->nv; m = p->body; sugar = p->sugar; |
for ( n = 0, t = m; t; t = NEXT(t), n++ ); |
for ( n = 0, t = m; t; t = NEXT(t), n++ ); |
write_short(s,&OID(p)); write_int(s,&nv); write_int(s,&sugar); write_int(s,&n); |
write_short(s,(unsigned short *)&OID(p)); write_int(s,(unsigned int *)&nv); write_int(s,(unsigned int *)&sugar); write_int(s,(unsigned int *)&n); |
for ( i = 0, t = m; i < n; i++, t = NEXT(t) ) { |
for ( i = 0, t = m; i < n; i++, t = NEXT(t) ) { |
saveobj(s,(Obj)t->c); |
saveobj(s,(Obj)t->c); |
write_int(s,&t->pos); |
write_int(s,(unsigned int *)&t->pos); |
write_int(s,&t->dl->td); write_intarray(s,&(t->dl->d[0]),nv); |
write_int(s,(unsigned int *)&t->dl->td); write_intarray(s,(unsigned int *)&(t->dl->d[0]),nv); |
} |
} |
} |
} |
|
|
void saveui(FILE *s,USINT u) |
void saveui(FILE *s,USINT u) |
{ |
{ |
write_short(s,&OID(u)); write_int(s,&BDY(u)); |
write_short(s,(unsigned short *)&OID(u)); write_int(s,(unsigned int *)&BDY(u)); |
} |
} |
|
|
void saveerror(FILE *s,ERR e) |
void saveerror(FILE *s,ERR e) |
{ |
{ |
write_short(s,&OID(e)); saveobj(s,(Obj)BDY(e)); |
write_short(s,(unsigned short *)&OID(e)); saveobj(s,(Obj)BDY(e)); |
} |
} |
|
|
void savegfmmat(FILE *s,GFMMAT p) |
void savegfmmat(FILE *s,GFMMAT p) |
{ |
{ |
int i,row,col; |
int i,row,col; |
|
|
write_short(s,&OID(p)); write_int(s,&p->row); write_int(s,&p->col); |
write_short(s,(unsigned short *)&OID(p)); write_int(s,(unsigned int *)&p->row); write_int(s,(unsigned int *)&p->col); |
for ( i = 0, row = p->row, col = p->col; i < row; i++ ) |
for ( i = 0, row = p->row, col = p->col; i < row; i++ ) |
write_intarray(s,p->body[i],col); |
write_intarray(s,(unsigned int *)p->body[i],col); |
} |
} |
|
|
void savebytearray(FILE *s,BYTEARRAY p) |
void savebytearray(FILE *s,BYTEARRAY p) |
{ |
{ |
write_short(s,&OID(p)); write_int(s,&p->len); |
write_short(s,(unsigned short *)&OID(p)); write_int(s,(unsigned int *)&p->len); |
write_string(s,p->body,p->len); |
write_string(s,p->body,p->len); |
} |
} |
|
|
Line 395 void savenbp(FILE *s,NBP p) |
|
Line 395 void savenbp(FILE *s,NBP p) |
|
NODE t; |
NODE t; |
NBM m; |
NBM m; |
|
|
write_short(s,&OID(p)); |
write_short(s,(unsigned short *)&OID(p)); |
for ( n = 0, t = BDY(p); t; t = NEXT(t), n++ ); |
for ( n = 0, t = BDY(p); t; t = NEXT(t), n++ ); |
write_int(s,&n); |
write_int(s,(unsigned int *)&n); |
for ( i = 0, t = BDY(p); i < n; t = NEXT(t), i++ ) { |
for ( i = 0, t = BDY(p); i < n; t = NEXT(t), i++ ) { |
m = (NBM)BDY(t); |
m = (NBM)BDY(t); |
saveobj(s,(Obj)m->c); |
saveobj(s,(Obj)m->c); |
write_int(s,&m->d); |
write_int(s,(unsigned int *)&m->d); |
write_intarray(s,m->b,(m->d+31)/32); |
write_intarray(s,(unsigned int *)m->b,(m->d+31)/32); |
} |
} |
} |
} |