[BACK]Return to ox.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_toolkit

Diff for /OpenXM/src/ox_toolkit/ox.c between version 1.38 and 1.44

version 1.38, 2015/08/04 05:24:44 version 1.44, 2015/08/18 02:24:04
Line 1 
Line 1 
 /* -*- mode: C; coding: euc-japan -*- */  /* -*- mode: C; coding: euc-japan -*- */
 /* $OpenXM: OpenXM/src/ox_toolkit/ox.c,v 1.37 2014/04/07 04:00:10 iwane Exp $ */  /* $OpenXM: OpenXM/src/ox_toolkit/ox.c,v 1.43 2015/08/17 05:18:35 noro Exp $ */
   
 /*  /*
    This module includes functions for sending/receiveng CMO's.     This module includes functions for sending/receiveng CMO's.
Line 244  static cmo_bf* receive_cmo_bf(OXFILE *oxfp)
Line 244  static cmo_bf* receive_cmo_bf(OXFILE *oxfp)
     return new_cmo_bf_set_mpfr(num);      return new_cmo_bf_set_mpfr(num);
 }  }
   
   static cmo_complex* receive_cmo_complex(OXFILE *oxfp)
   {
       cmo *re, *im;
   
       re = receive_cmo(oxfp);
       im = receive_cmo(oxfp);
       return new_cmo_complex_set_re_im(re,im);
   }
   
   
 static cmo_zero* receive_cmo_zero(OXFILE *oxfp)  static cmo_zero* receive_cmo_zero(OXFILE *oxfp)
 {  {
     return new_cmo_zero();      return new_cmo_zero();
Line 371  cmo *receive_cmo_tag(OXFILE *oxfp, int tag)
Line 381  cmo *receive_cmo_tag(OXFILE *oxfp, int tag)
     case CMO_BIGFLOAT:      case CMO_BIGFLOAT:
         m = (cmo *)receive_cmo_bf(oxfp);          m = (cmo *)receive_cmo_bf(oxfp);
         break;          break;
       case CMO_COMPLEX:
           m = (cmo *)receive_cmo_complex(oxfp);
           break;
     case CMO_ZERO:      case CMO_ZERO:
         m = (cmo *)receive_cmo_zero(oxfp);          m = (cmo *)receive_cmo_zero(oxfp);
         break;          break;
Line 656  static int send_cmo_bf(OXFILE *oxfp, cmo_bf* c)
Line 669  static int send_cmo_bf(OXFILE *oxfp, cmo_bf* c)
     return 0;      return 0;
 }  }
   
   static int send_cmo_complex(OXFILE *oxfp, cmo_complex* c)
   {
       send_cmo(oxfp, c->re);
       send_cmo(oxfp, c->im);
       return 0;
   }
   
 static int send_cmo_recursive_polynomial(OXFILE *oxfp, cmo_recursive_polynomial* c)  static int send_cmo_recursive_polynomial(OXFILE *oxfp, cmo_recursive_polynomial* c)
 {  {
         send_cmo(oxfp, (cmo *)c->ringdef);          send_cmo(oxfp, (cmo *)c->ringdef);
Line 725  void send_cmo(OXFILE *oxfp, cmo* c)
Line 745  void send_cmo(OXFILE *oxfp, cmo* c)
     case CMO_BIGFLOAT:      case CMO_BIGFLOAT:
         send_cmo_bf(oxfp, (cmo_bf *)c);          send_cmo_bf(oxfp, (cmo_bf *)c);
         break;          break;
       case CMO_COMPLEX:
           send_cmo_complex(oxfp, (cmo_complex *)c);
           break;
     case CMO_DISTRIBUTED_POLYNOMIAL:      case CMO_DISTRIBUTED_POLYNOMIAL:
         send_cmo_distributed_polynomial(oxfp, (cmo_distributed_polynomial *)c);          send_cmo_distributed_polynomial(oxfp, (cmo_distributed_polynomial *)c);
         break;          break;
Line 756  static int send_mpz(OXFILE *oxfp, mpz_ptr mpz)
Line 779  static int send_mpz(OXFILE *oxfp, mpz_ptr mpz)
     int len = abs(mpz->_mp_size) * n;      int len = abs(mpz->_mp_size) * n;
         int *ptr = (int *)mpz->_mp_d;          int *ptr = (int *)mpz->_mp_d;
     int size;      int size;
     send_int32(oxfp, mpz->_mp_size * n);  
 #if 0  
     if (len > 0 && ptr[len-1] == 0) {      if (len > 0 && ptr[len-1] == 0) {
         len--;          len--;
     }      }
     size = mpz->_mp_size < 0 ? -len : len;      size = mpz->_mp_size < 0 ? -len : len;
     send_int32(oxfp, size);      send_int32(oxfp, size);
 #endif  
     for(i=0; i<len; i++) {      for(i=0; i<len; i++) {
         send_int32(oxfp, ptr[i]);          send_int32(oxfp, ptr[i]);
     }      }
     return 0;      return 0;
 }  }
   
 void send_int64(OXFILE *oxfp,UL64 a)  int send_int64(OXFILE *oxfp,UL64 a)
 {  {
   send_int32(oxfp, a>>32);    return oxfp->send_double(oxfp,((double *)&a)[0]);
   send_int32(oxfp, a&0xffffffff);  
 }  }
   
 UL64 receive_int64(OXFILE *oxfp)  UL64 receive_int64(OXFILE *oxfp)
 {  {
   UL64 u,l;          double d = receive_double(oxfp);
     return ((UL64 *)&d)[0];
   u = receive_int32(oxfp);  
   l = receive_int32(oxfp);  
   return (u<<32)|l;  
 }  }
   
 static void receive_mpfr(OXFILE *oxfp, mpfr_ptr mpfr)  static void receive_mpfr(OXFILE *oxfp, mpfr_ptr mpfr)
 {  {
   int sgn,prec,len,i;    int sgn,prec,len,i;
   long *ptr;    unsigned int hi,lo;
     unsigned long *ptr;
   L64 exp;    L64 exp;
   
   sgn  = receive_int32(oxfp);    sgn  = receive_int32(oxfp);
   prec  = receive_int32(oxfp);    prec  = receive_int32(oxfp);
   exp  = receive_int64(oxfp);    exp = receive_int64(oxfp);
   /* len = length as an int array (int = 4bytes) */    /* len = length as an int array (int = 4bytes) */
   len  = receive_int32(oxfp);    len  = receive_int32(oxfp);
   
Line 805  static void receive_mpfr(OXFILE *oxfp, mpfr_ptr mpfr)
Line 822  static void receive_mpfr(OXFILE *oxfp, mpfr_ptr mpfr)
   for ( i = 0; i < len; i++ )    for ( i = 0; i < len; i++ )
     ptr[i] = receive_int32(oxfp);      ptr[i] = receive_int32(oxfp);
 #else  #else
   len >>= 1;    if ( len%2 ) {
   for ( i = 0; i < len; i++ )      hi = receive_int32(oxfp);
     ptr[i] = receive_int64(oxfp);      ptr[0] = (((UL64)hi)<<32);
           i = 1;
     } else
       i = 0;
     len = (len+1)/2;
     for ( ; i < len; i ++ ) {
       lo = (unsigned int)receive_int32(oxfp);
       hi = (unsigned int)receive_int32(oxfp);
       ptr[i] = (((UL64)hi)<<32)|((UL64)lo);
     }
 #endif  #endif
 }  }
   
 static int send_mpfr(OXFILE *oxfp, mpfr_ptr mpfr)  static int send_mpfr(OXFILE *oxfp, mpfr_ptr mpfr)
 {  {
   
   int i,len;    int i,len,t;
   long *ptr;    unsigned long *ptr;
     UL64 uexp;
   
   send_int32(oxfp, MPFR_SIGN(mpfr));    send_int32(oxfp, MPFR_SIGN(mpfr));
   send_int32(oxfp, MPFR_PREC(mpfr));    send_int32(oxfp, MPFR_PREC(mpfr));
Line 827  static int send_mpfr(OXFILE *oxfp, mpfr_ptr mpfr)
Line 854  static int send_mpfr(OXFILE *oxfp, mpfr_ptr mpfr)
   for ( i = 0; i < len; i++ )    for ( i = 0; i < len; i++ )
     send_int32(oxfp,ptr[i]);      send_int32(oxfp,ptr[i]);
 #else /* SIZEOF_LONG==8 */  #else /* SIZEOF_LONG==8 */
   send_int32(oxfp, 2*len);    t = (MPFR_PREC(mpfr)+31)/32;
   for ( i = 0; i < len; i++ )    send_int32(oxfp, t);
     send_int64(oxfp,ptr[i]);    if ( t%2 ) {
           send_int32(oxfp,(unsigned int)(ptr[0]>>32));
       i = 1;
     } else
       i = 0;
     t = (t+1)/2;
     for ( ; i < len; i++ ) {
           send_int32(oxfp,(unsigned int)(ptr[i]&0xffffffff));
           send_int32(oxfp,(unsigned int)(ptr[i]>>32));
     }
 #endif  #endif
     return 0;      return 0;
 }  }

Legend:
Removed from v.1.38  
changed lines
  Added in v.1.44

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