mpn_set_str_bits
    Niels Möller 
    nisse at lysator.liu.se
       
    Thu Oct  1 05:59:15 UTC 2020
    
    
  
Marco Bodrato <bodrato at mail.dm.unipi.it> writes:
> static mp_size_t
> mpn_set_str_bits (mp_ptr rp, const unsigned char *sp, size_t sn,
> 		  unsigned bits)
> {
>   mp_size_t rn;
>   mp_limb_t limb;
>   unsigned shift;
>
>   for (limb = 0, rn = 0, shift = 0; sn-- > 0; )
>     {
>       limb |= (mp_limb_t) sp[sn] << shift;
>       shift += bits;
>       if (shift >= GMP_LIMB_BITS)
>         {
>           shift -= GMP_LIMB_BITS;
>           rp[rn++] = limb;
>           /* Next line is correct also if shift == 0,
>              bits == 8, and mp_limb_t == unsigned char. */
>           limb = (unsigned int) sp[sn] >> (bits - shift);
>         }
>     }
>   if (limb != 0)
>     rp[rn++] = limb;
>   else
>     rn = mpn_normalized_size (rp, rn);
>   return rn;
> }
>
> It seems simple enough. Any further comment?
Looks nice!
Regards,
/Niels
-- 
Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.
    
    
More information about the gmp-devel
mailing list