Changeset f8c998c in git


Ignore:
Timestamp:
Jan 14, 2014, 4:39:05 PM (10 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b52fc4b2495505785981d640dcf7eb3e456778ef')
Children:
3ec6eca5156711f5fab6a2d21c403e256f154188
Parents:
cda527bb5f12ee976b40fea8a41bcc5d6d762b41
Message:
introduce SSI_BASE(16) and improve reading large ints
Location:
Singular/links
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Singular/links/s_buff.cc

    rcda527 rf8c998c  
    228228  } while((!F->is_eof) && (c<=' '));
    229229  if (c=='-') { neg=-1; c=s_getc(F); }
     230  char *str=(char*)omAlloc0(128);
     231  int str_l=128;
     232  int str_p=0;
    230233  while(c>' ')
    231234  {
    232     if (isdigit(c))
    233     {
    234       mpz_mul_ui(a,a,base);
    235       mpz_add_ui(a,a,(c-'0'));
    236     }
    237     else if ((c>='a') && (c<='z'))
    238     {
    239       mpz_mul_ui(a,a,base);
    240       mpz_add_ui(a,a,(c-'a'+10));
    241     }
    242     else if ((c>='A') && (c<='Z'))
    243     {
    244       mpz_mul_ui(a,a,base);
    245       mpz_add_ui(a,a,(c-'A'+10));
     235    if ((isdigit(c))
     236    || ((c>='a') && (c<='z'))
     237    || ((c>='A') && (c<='Z')))
     238    {
     239      str[str_p]=c;
     240      str_p++;
    246241    }
    247242    else
     
    250245      break;
    251246    }
    252     c=s_getc(F);
    253   }
     247    if (str_p>=str_l)
     248    {
     249      str_l=str_l*2;
     250      str=(char*)omRealloc0(str,str_l);
     251    }
     252    c=s_getc(F);
     253  }
     254  mpz_set_str(a,str,base);
     255  omFreeSize(str,str_l);
    254256  if (neg==-1) mpz_neg(a,a);
    255257}
  • Singular/links/ssiLink.cc

    rcda527 rf8c998c  
    6868#define LONG int
    6969#endif
     70
     71#define SSI_BASE 16
    7072typedef struct
    7173{
     
    166168        mpz_init_set_si(tmp,nn);
    167169        fputs("8 ",d->f_write);
    168         mpz_out_str (d->f_write,32, tmp);
     170        mpz_out_str (d->f_write,SSI_BASE, tmp);
    169171        fputc(' ',d->f_write);
    170172        mpz_clear(tmp);
     
    177179      //gmp_fprintf(d->f_write,"%d %Zd %Zd ",n->s,n->z,n->n);
    178180      fprintf(d->f_write,"%d ",n->s+5);
    179       mpz_out_str (d->f_write,32, n->z);
     181      mpz_out_str (d->f_write,SSI_BASE, n->z);
    180182      fputc(' ',d->f_write);
    181       mpz_out_str (d->f_write,32, n->n);
     183      mpz_out_str (d->f_write,SSI_BASE, n->n);
    182184      fputc(' ',d->f_write);
    183185
     
    188190      //gmp_fprintf(d->f_write,"3 %Zd ",n->z);
    189191      fputs("8 ",d->f_write);
    190       mpz_out_str (d->f_write,32, n->z);
     192      mpz_out_str (d->f_write,SSI_BASE, n->z);
    191193      fputc(' ',d->f_write);
    192194
     
    446448         number n=nlRInit(0);
    447449         mpz_init(n->n);
    448          s_readmpz_base (d->f_read,n->z, 32);
    449          s_readmpz_base (d->f_read,n->n, 32);
     450         s_readmpz_base (d->f_read,n->z, SSI_BASE);
     451         s_readmpz_base (d->f_read,n->n, SSI_BASE);
    450452         n->s=sub_type-5;
    451453         return n;
     
    454456       {// read raw mpz_t
    455457         number n=nlRInit(0);
    456          s_readmpz_base (d->f_read,n->z, 32);
     458         s_readmpz_base (d->f_read,n->z, SSI_BASE);
    457459         n->s=sub_type=3; /*subtype-5*/
    458460         return n;
Note: See TracChangeset for help on using the changeset viewer.