Ciao, Il Mar, 1 Settembre 2015 6:46 am, Marco Bodrato ha scritto: > I'd like a sort of "copy-on-write" interface, that allocates the needed > limbs when we need to store a new value into a variable and possibly > (MPZ_REALLOC should, MPZ_NEWALLOC should not) copy the previous SIZ(x) > limbs to the new area...
I mean, code like the following inserted in mpz/init.c : if (ALLOC (m) == 0) { mp = __GMP_ALLOCATE_FUNC_LIMBS (new_alloc); if (SIZ (m) != 0) if (ABSIZ(m) > new_alloc) SIZ (m) = 0; else MPN_COPY (mp, PTR (m), ABSIZ (m)); } else { mp = __GMP_REALLOCATE_FUNC_LIMBS (PTR (m), ALLOC (m), new_alloc); if (ABSIZ (m) > new_alloc) SIZ (m) = 0; } PTR (m) = mp; ALLOC(m) = new_alloc; return (void *) mp; This way, we can for example define mpq_init (x) with: ALLOC(NUM(x)) = ALLOC(DEN(x)) = 0; PTR(NUM(x)) = PTR(DEN(x)) = ptr_to_static_one; SIZ(NUM(x)) = 0; SIZ(DEN(x)) = 1; Regards, m -- http://bodrato.it/papers/ _______________________________________________ gmp-devel mailing list gmp-devel@gmplib.org https://gmplib.org/mailman/listinfo/gmp-devel