_ptr and _srcptr types

Niels Möller nisse at lysator.liu.se
Tue May 15 20:47:40 UTC 2018


tg at gmplib.org (Torbjörn Granlund) writes:

> Emmanuel Thomé <Emmanuel.Thome at inria.fr> writes:
>
>   I've personally always used the mpz_ptr and mpz_srcptr in functions that
>   take mpz arguments, taking the liberty to use this undocumented type.
>
> I suppose we could declare these.  I'd like to hear from the rest of the
> GMP "core team".

My fairly strong opinion is that we should document them. They are
important for user code that needs to handle pointers to mpz_t values.
One simple use case:

  void foo (mp_srcptr a, mp_srcptr b) 
  {
    if (mpz_cmp (a, b) < 0)
      {
        mp_srcptr t = a;
        a = b;
        b = t;
      }
    ... code that requires a >= b ...
  }

This gets a lot more awkward if the function has to be declared using
documented types, as

  void foo (const mpz_t a, const mpz_t b)

Simplest alternative I see would be to copy into local non-const mpz_t
variables and use mpz_swap, and that's an extra copy I don't want to
force users to make.

Functions returning pointers to an mpz_t is another important case
(mpz_roinit_n is one (unusual) example, spotted by Emmanuel). mpq_numref
and mpq_denref too, if they were implemented as (inline) functions
rather than macros.

I don't think need for handling pointers is that common in GMP user
code, but not so obscure that it should be ignored and unsupported.

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