[BACK]Return to bsave.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / io

Diff for /OpenXM_contrib2/asir2000/io/bsave.c between version 1.1.1.1 and 1.17

version 1.1.1.1, 1999/12/03 07:39:11 version 1.17, 2015/08/04 06:20:45
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/asir99/io/bsave.c,v 1.1.1.1 1999/11/10 08:12:30 noro Exp $ */  /*
    * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
    * All rights reserved.
    *
    * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
    * non-exclusive and royalty-free license to use, copy, modify and
    * redistribute, solely for non-commercial and non-profit purposes, the
    * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
    * conditions of this Agreement. For the avoidance of doubt, you acquire
    * only a limited right to use the SOFTWARE hereunder, and FLL or any
    * third party developer retains all rights, including but not limited to
    * copyrights, in and to the SOFTWARE.
    *
    * (1) FLL does not grant you a license in any way for commercial
    * purposes. You may use the SOFTWARE only for non-commercial and
    * non-profit purposes only, such as academic, research and internal
    * business use.
    * (2) The SOFTWARE is protected by the Copyright Law of Japan and
    * international copyright treaties. If you make copies of the SOFTWARE,
    * with or without modification, as permitted hereunder, you shall affix
    * to all such copies of the SOFTWARE the above copyright notice.
    * (3) An explicit reference to this SOFTWARE and its copyright owner
    * shall be made on your publication or presentation in any form of the
    * results obtained by use of the SOFTWARE.
    * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
    * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
    * for such modification or the source code of the modified part of the
    * SOFTWARE.
    *
    * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
    * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
    * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
    * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
    * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
    * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
    * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
    * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
    * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
    * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
    * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
    * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
    * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
    * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
    * 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/bsave.c,v 1.16 2009/03/16 16:43:03 ohara Exp $
   */
 /* saveXXX must not use GC_malloc(), GC_malloc_atomic(). */  /* saveXXX must not use GC_malloc(), GC_malloc_atomic(). */
   
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
 #if INET  
 #include "com.h"  #include "com.h"
 #endif  
   
 #if PARI  void savenbp(FILE *s,NBP p);
 #include "genpari.h"  
 int get_lg(GEN);  
 #endif  
   
 void saveerror(FILE *,ERR);  
 void saveui(FILE *,USINT);  
 void savedp(FILE *,DP);  
 void savestr(FILE *,char *);  
 void savestring(FILE *,STRING);  
 void savemat(FILE *,MAT);  
 void savevect(FILE *,VECT);  
 void savelist(FILE *,LIST);  
 void saver(FILE *,R);  
 void savep(FILE *,P);  
 void savegf2n(FILE *,GF2N);  
 void savegfpn(FILE *,GFPN);  
 void savelm(FILE *,LM);  
 void savemi(FILE *,MQ);  
 void savecplx(FILE *,C);  
 void savebf(FILE *,BF);  
 void savereal(FILE *,Real);  
 void saveq(FILE *,Q);  
 void savenum(FILE *,Num);  
 void savepfins(FILE *,V);  
 void savegfmmat(FILE *,GFMMAT);  
   
 #define O_GF2MAT 12  
 #define O_MATHCAP 13  
 #define O_F 14  
 #define O_GFMMAT 15  
   
 void (*savef[])() = { 0, savenum, savep, saver, savelist, savevect,  void (*savef[])() = { 0, savenum, savep, saver, savelist, savevect,
         savemat, savestring, 0, savedp, saveui, saveerror,0,0,0,savegfmmat };          savemat, savestring, 0, savedp, saveui, saveerror,0,0,0,savegfmmat,
 void (*nsavef[])() = { saveq, savereal, 0, savebf, savecplx ,savemi, savelm, savegf2n, savegfpn};          savebytearray, 0, 0, 0, 0, 0, 0, 0, 0,  savenbp };
   #if defined(INTERVAL)
   void saveitv();
   void saveitvd();
   void (*nsavef[])() = { saveq, savereal, 0, savebf, saveitv, saveitvd, 0, saveitv, savecplx ,savemi, savelm, savegf2n, savegfpn, savegfs, savegfsn,savedalg};
   #else
   void (*nsavef[])() = { saveq, savereal, 0, savebf, savecplx ,savemi, savelm, savegf2n, savegfpn, savegfs, savegfsn,savedalg};
   #endif
   
 static short zeroval = 0;  static short zeroval = 0;
   
 void saveobj(s,p)  void saveobj(FILE *s,Obj p)
 FILE *s;  
 Obj p;  
 {  {
         if ( !p )          if ( !p )
                 write_short(s,&zeroval);                  write_short(s,&zeroval);
Line 57  Obj p;
Line 77  Obj p;
                 (*savef[OID(p)])(s,p);                  (*savef[OID(p)])(s,p);
 }  }
   
 void savenum(s,p)  void savenum(FILE *s,Num p)
 FILE *s;  
 Num p;  
 {  {
         if ( !nsavef[NID(p)] )          if ( !nsavef[NID(p)] )
                 error("savenum : not implemented");                  error("savenum : not implemented");
Line 70  Num p;
Line 88  Num p;
         }          }
 }  }
   
 void saveq(s,p)  void saveq(FILE *s,Q p)
 FILE *s;  
 Q p;  
 {  {
         int size[2];          int size[2];
         int len = 2;          int len = 2;
Line 84  Q p;
Line 100  Q p;
                 write_intarray(s,BD(DN(p)),size[1]);                  write_intarray(s,BD(DN(p)),size[1]);
 }  }
   
 void savereal(s,p)  void savereal(FILE *s,Real p)
 FILE *s;  
 Real p;  
 { write_double(s,&BDY(p)); }  { write_double(s,&BDY(p)); }
   
 /*  /*
Line 94  Real p;
Line 108  Real p;
  * -> | id(2) | nid(1) | sgn(1) | expo>>32 | expo&0xffffffff | len | ... |   * -> | id(2) | nid(1) | sgn(1) | expo>>32 | expo&0xffffffff | len | ... |
  */   */
   
 void savebf(s,p)  void savebf(FILE *s,BF p)
 FILE *s;  
 BF p;  
 {  {
 #if PARI    unsigned int zero = 0;
         GEN z;    unsigned int prec;
         int sign;          L exp;
         unsigned long expo;    int sgn,len,t;
         unsigned int len,t;  
   
         z = (GEN)BDY(p);    prec = MPFR_PREC(p->body);
         sign = signe(z);    exp = MPFR_EXP(p->body);
         len = lg(z)-2;    sgn = MPFR_SIGN(p->body);
         expo = expo(z);          len = MPFR_LIMB_SIZE(p->body);
   
         write_int(s,&sign);          write_int(s,&sgn);
           write_int(s,(int *)&prec);
 #if defined(LONG_IS_32BIT)          write_int64(s,(UL *)&exp);
         write_int(s,(int *)&zeroval); /* expo>>32 is always 0 */  #if SIZEOF_LONG == 4
         write_int(s,(int *)&expo);  
         write_int(s,&len);          write_int(s,&len);
         write_intarray(s,(int *)&z[2],len);          write_intarray(s,p->body->_mpfr_d,len);
 #elif defined(LONG_IS_64BIT)  #else /* SIZEOF_LONG == 8 */
         t = expo>>32; write_int(s,(int *)&t);          t = 2*len;
         t = expo&0xffffffff; write_int(s,&t);          write_int(s,&t);
         t = 2*len; write_int(s,&t);          write_longarray(s,p->body->_mpfr_d,len);
         write_longarray(s,&z[2],len);  
 #endif  #endif
 #else  
         error("savebf : PARI is not combined");  
 #endif  
 }  }
   
 void savecplx(s,p)  #if defined(INTERVAL)
 FILE *s;  void saveitv(FILE *s,Itv p)
 C p;  {
           saveobj(s,(Obj)INF(p));
           saveobj(s,(Obj)SUP(p));
   }
   
   void saveitvd(FILE *s,IntervalDouble p)
   {
           write_double(s,&INF(p));
           write_double(s,&SUP(p));
   }
   #endif
   
   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(s,p)  void savemi(FILE *s,MQ p)
 FILE *s;  
 MQ p;  
 { write_int(s,&CONT(p)); }  { write_int(s,&CONT(p)); }
   
 void savelm(s,p)  void savelm(FILE *s,LM p)
 FILE *s;  
 LM p;  
 {  {
         int size;          int size;
   
Line 148  LM p;
Line 162  LM p;
         write_intarray(s,BD(BDY(p)),size);          write_intarray(s,BD(BDY(p)),size);
 }  }
   
 void savegf2n(s,p)  void savegf2n(FILE *s,GF2N p)
 FILE *s;  
 GF2N p;  
 {  {
         int len;          int len;
   
Line 159  GF2N p;
Line 171  GF2N p;
         write_intarray(s,p->body->b,len);          write_intarray(s,p->body->b,len);
 }  }
   
 void savegfpn(s,p)  void savegfpn(FILE *s,GFPN p)
 FILE *s;  
 GFPN p;  
 {  {
         int d,i;          int d,i;
   
Line 171  GFPN p;
Line 181  GFPN p;
                 saveobj(s,(Obj)p->body->c[i]);                  saveobj(s,(Obj)p->body->c[i]);
 }  }
   
 void savep(s,p)  void savegfs(FILE *s,GFS p)
 FILE *s;  { write_int(s,&CONT(p)); }
 P p;  
   void savegfsn(FILE *s,GFSN p)
 {  {
           int d;
   
           d = DEG(BDY(p));
           write_int(s,&d);
           write_intarray(s,COEF(BDY(p)),d+1);
   }
   
   void savedalg(FILE *s,DAlg p)
   {
           saveobj(s,(Obj)p->nm);
           saveobj(s,(Obj)p->dn);
   }
   
   void savep(FILE *s,P p)
   {
         DCP dc;          DCP dc;
         int n;          int n;
         int vindex;          int vindex;
Line 198  P p;
Line 224  P p;
 /* save a pure function (v->attr = V_PF) */  /* save a pure function (v->attr = V_PF) */
 /* |name(str)|argc(int)|darray(intarray)|args| */  /* |name(str)|argc(int)|darray(intarray)|args| */
   
 void savepfins(s,v)  void savepfins(FILE *s,V v)
 FILE *s;  
 V v;  
 {  {
         PFINS ins;          PFINS ins;
         PF pf;          PF pf;
Line 220  V v;
Line 244  V v;
                 saveobj(s,ins->ad[i].arg);                  saveobj(s,ins->ad[i].arg);
 }  }
   
 void saver(s,p)  void saver(FILE *s,R p)
 FILE *s;  
 R p;  
 {  {
         if ( !RAT(p) )          if ( !RAT(p) )
                 savep(s,(P)p);                  savep(s,(P)p);
Line 232  R p;
Line 254  R p;
         }          }
 }  }
   
 void savelist(s,p)  void savelist(FILE *s,LIST p)
 FILE *s;  
 LIST p;  
 {  {
         int n;          int n;
         NODE tn;          NODE tn;
Line 245  LIST p;
Line 265  LIST p;
                 saveobj(s,(Obj)BDY(tn));                  saveobj(s,(Obj)BDY(tn));
 }  }
   
 void savevect(s,p)  void savevect(FILE *s,VECT p)
 FILE *s;  
 VECT p;  
 {  {
         int i,len = 2;          int i,len = 2;
   
Line 256  VECT p;
Line 274  VECT p;
                 saveobj(s,(Obj)BDY(p)[i]);                  saveobj(s,(Obj)BDY(p)[i]);
 }  }
   
 void savemat(s,p)  void savemat(FILE *s,MAT p)
 FILE *s;  
 MAT p;  
 {  {
         int i,j,row,col;          int i,j,row,col;
         int len = 3;          int len = 3;
Line 269  MAT p;
Line 285  MAT p;
                         saveobj(s,(Obj)BDY(p)[i][j]);                          saveobj(s,(Obj)BDY(p)[i][j]);
 }  }
   
 void savestring(s,p)  void savestring(FILE *s,STRING p)
 FILE *s;  
 STRING p;  
 {  {
         write_short(s,&OID(p)); savestr(s,BDY(p));          write_short(s,&OID(p)); savestr(s,BDY(p));
 }  }
   
 void savestr(s,p)  void savestr(FILE *s,char *p)
 FILE *s;  
 char *p;  
 {  {
         int size;          int size;
   
Line 287  char *p;
Line 299  char *p;
                 write_string(s,p,size);                  write_string(s,p,size);
 }  }
   
 void savedp(s,p)  void savedp(FILE *s,DP p)
 FILE *s;  
 DP p;  
 {  {
         int nv,n,i,sugar;          int nv,n,i,sugar;
         MP m,t;          MP m,t;
Line 303  DP p;
Line 313  DP p;
         }          }
 }  }
   
 void saveui(s,u)  void saveui(FILE *s,USINT u)
 FILE *s;  
 USINT u;  
 {  {
         write_short(s,&OID(u)); write_int(s,&BDY(u));          write_short(s,&OID(u)); write_int(s,&BDY(u));
 }  }
   
 void saveerror(s,e)  void saveerror(FILE *s,ERR e)
 FILE *s;  
 ERR e;  
 {  {
         write_short(s,&OID(e)); saveobj(s,(Obj)BDY(e));          write_short(s,&OID(e)); saveobj(s,(Obj)BDY(e));
 }  }
   
 void savegfmmat(s,p)  void savegfmmat(FILE *s,GFMMAT p)
 FILE *s;  
 GFMMAT p;  
 {  {
         int i,j,row,col;          int i,row,col;
   
         write_short(s,&OID(p)); write_int(s,&p->row); write_int(s,&p->col);          write_short(s,&OID(p)); write_int(s,&p->row); write_int(s,&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,p->body[i],col);
   }
   
   void savebytearray(FILE *s,BYTEARRAY p)
   {
           write_short(s,&OID(p)); write_int(s,&p->len);
           write_string(s,p->body,p->len);
   }
   
   void savenbp(FILE *s,NBP p)
   {
           int i,n;
           NODE t;
           NBM m;
   
           write_short(s,&OID(p));
           for ( n = 0, t = BDY(p); t; t = NEXT(t), n++ );
           write_int(s,&n);
           for ( i = 0, t = BDY(p); i < n; t = NEXT(t), i++ ) {
                   m = (NBM)BDY(t);
                   saveobj(s,(Obj)m->c);
                   write_int(s,&m->d);
                   write_intarray(s,m->b,(m->d+31)/32);
           }
 }  }

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.17

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>