#pragma once #include struct mpz_field { int length; mpz_t values[0]; }; typedef struct mpz_field mpz_field_t; #define mpz_field_value(f, i) (f->values[i]) static inline void __tools_mpz_cleanup(mpz_t *mpz){ // printf("__tools_mpz_clenaup(%x)\n", mpz); mpz_clear(*mpz); } void mpz_random_mod( mpz_t rop, mpz_t p); char* mpz_to_string(mpz_t i, int base); #define mpz_cleanup(name) mpz_t name __attribute__ (( __cleanup__(__tools_mpz_cleanup))); mpz_init( name ); #define mpz_t_cleanup_set(name, value) mpz_t name __attribute__ (( __cleanup__(__tools_mpz_cleanup))); mpz_init_set( name, value ); mpz_t* mpz_field_init(int length); void mpz_field_clear(mpz_t *field); static inline void __tools_mpz_field_cleanup(mpz_t **f){ mpz_field_clear(*f); } #define mpz_field_cleanup(name, length) mpz_t* name __attribute__ (( __cleanup__(__tools_mpz_field_cleanup))) = mpz_field_init( length );