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