1818#define FMPZ_INLINE static inline
1919#endif
2020
21- #include <gmp.h>
2221#include "fmpz_types.h"
2322#include "longlong.h"
2423
2524#ifdef __cplusplus
26- extern "C" {
25+ extern "C" {
2726#endif
2827
2928/* Memory management *********************************************************/
3029
30+ #if defined(__GMP_H__ )
3131mpz_ptr _fmpz_new_mpz (void );
3232
33+ mpz_ptr _fmpz_promote (fmpz_t f );
34+ mpz_ptr _fmpz_promote_val (fmpz_t f );
35+
36+ void _fmpz_init_readonly_mpz (fmpz_t f , const mpz_t z );
37+ void flint_mpz_init_set_readonly (mpz_t z , const fmpz_t f );
38+ void fmpz_init_set_readonly (fmpz_t f , const mpz_t z );
39+
40+ void flint_mpz_clear_readonly (mpz_t z );
41+ void _fmpz_clear_readonly_mpz (mpz_t );
42+ #endif
43+
3344void _fmpz_clear_mpz (fmpz f );
3445void _fmpz_cleanup_mpz_content (void );
3546void _fmpz_cleanup (void );
3647
37- mpz_ptr _fmpz_promote (fmpz_t f );
38- mpz_ptr _fmpz_promote_val (fmpz_t f );
39-
4048FMPZ_INLINE
4149void _fmpz_demote (fmpz_t f )
4250{
@@ -60,6 +68,8 @@ void _fmpz_promote_neg_ui(fmpz_t f, ulong v);
6068void _fmpz_init_promote_set_ui (fmpz_t f , ulong v );
6169void _fmpz_init_promote_set_si (fmpz_t f , slong v );
6270
71+ void fmpz_set (fmpz_t f , const fmpz_t g );
72+
6373FMPZ_INLINE
6474void fmpz_init_set (fmpz_t f , const fmpz_t g )
6575{
@@ -69,10 +79,8 @@ void fmpz_init_set(fmpz_t f, const fmpz_t g)
6979 }
7080 else
7181 {
72- mpz_ptr ptr ;
73- ptr = _fmpz_new_mpz ();
74- * f = PTR_TO_COEFF (ptr );
75- mpz_set (ptr , COEFF_TO_PTR (* g ));
82+ * f = 0 ;
83+ fmpz_set (f , g );
7684 }
7785}
7886
@@ -94,12 +102,6 @@ void fmpz_init_set_si(fmpz_t f, slong g)
94102 _fmpz_init_promote_set_si (f , g );
95103}
96104
97- void _fmpz_init_readonly_mpz (fmpz_t f , const mpz_t z );
98- void flint_mpz_init_set_readonly (mpz_t z , const fmpz_t f );
99- void fmpz_init_set_readonly (fmpz_t f , const mpz_t z );
100-
101- void flint_mpz_clear_readonly (mpz_t z );
102- void _fmpz_clear_readonly_mpz (mpz_t );
103105void fmpz_clear_readonly (fmpz_t f );
104106
105107int _fmpz_is_canonical (const fmpz_t x );
@@ -134,7 +136,6 @@ void fmpz_one(fmpz_t f)
134136 * f = WORD (1 );
135137}
136138
137- void fmpz_set (fmpz_t f , const fmpz_t g );
138139FMPZ_INLINE void fmpz_swap (fmpz_t f , fmpz_t g ) { FLINT_SWAP (fmpz , * f , * g ); }
139140
140141slong fmpz_get_si (const fmpz_t f );
@@ -179,57 +180,9 @@ fmpz_neg_ui(fmpz_t f, ulong val)
179180 _fmpz_promote_neg_ui (f , val );
180181}
181182
182- FMPZ_INLINE void
183- fmpz_get_uiui (ulong * hi , ulong * low , const fmpz_t f )
184- {
185- if (!COEFF_IS_MPZ (* f ))
186- {
187- * low = * f ;
188- * hi = 0 ;
189- }
190- else
191- {
192- mpz_ptr mpz = COEFF_TO_PTR (* f );
193- * low = mpz -> _mp_d [0 ];
194- * hi = mpz -> _mp_size == 2 ? mpz -> _mp_d [1 ] : 0 ;
195- }
196- }
197-
198- FMPZ_INLINE void
199- fmpz_set_uiui (fmpz_t f , ulong hi , ulong lo )
200- {
201- if (hi == 0 )
202- {
203- fmpz_set_ui (f , lo );
204- }
205- else
206- {
207- mpz_ptr z = _fmpz_promote (f );
208- if (z -> _mp_alloc < 2 )
209- mpz_realloc2 (z , 2 * FLINT_BITS );
210- z -> _mp_d [0 ] = lo ;
211- z -> _mp_d [1 ] = hi ;
212- z -> _mp_size = 2 ;
213- }
214- }
215-
216- FMPZ_INLINE void
217- fmpz_neg_uiui (fmpz_t f , ulong hi , ulong lo )
218- {
219- if (hi == 0 )
220- {
221- fmpz_neg_ui (f , lo );
222- }
223- else
224- {
225- mpz_ptr z = _fmpz_promote (f );
226- if (z -> _mp_alloc < 2 )
227- mpz_realloc2 (z , 2 * FLINT_BITS );
228- z -> _mp_d [0 ] = lo ;
229- z -> _mp_d [1 ] = hi ;
230- z -> _mp_size = -2 ;
231- }
232- }
183+ void fmpz_get_uiui (ulong * hi , ulong * low , const fmpz_t f );
184+ void fmpz_set_uiui (fmpz_t f , ulong hi , ulong lo );
185+ void fmpz_neg_uiui (fmpz_t f , ulong hi , ulong lo );
233186
234187void fmpz_get_signed_uiui (ulong * hi , ulong * lo , const fmpz_t x );
235188
@@ -256,16 +209,18 @@ void fmpz_set_ui_array(fmpz_t out, const ulong * in, slong n);
256209void fmpz_get_signed_ui_array (ulong * out , slong n , const fmpz_t in );
257210void fmpz_set_signed_ui_array (fmpz_t out , const ulong * in , slong n );
258211
259- void fmpz_get_mpz (mpz_t x , const fmpz_t f );
260- void fmpz_set_mpz (fmpz_t f , const mpz_t x );
261-
262212ulong fmpz_get_nmod (const fmpz_t f , nmod_t mod );
263213
264214double fmpz_get_d (const fmpz_t f );
265215void fmpz_set_d (fmpz_t f , double c );
266216
217+ #if defined(__GMP_H__ )
218+ void fmpz_get_mpz (mpz_t x , const fmpz_t f );
219+ void fmpz_set_mpz (fmpz_t f , const mpz_t x );
220+
267221void fmpz_get_mpf (mpf_t x , const fmpz_t f );
268222void fmpz_set_mpf (fmpz_t f , const mpf_t x );
223+ #endif
269224
270225#ifdef __MPFR_H
271226void fmpz_get_mpfr (mpfr_t x , const fmpz_t f , mpfr_rnd_t rnd );
@@ -298,7 +253,7 @@ int fmpz_is_even(const fmpz_t f)
298253 if (!COEFF_IS_MPZ (* f ))
299254 return !((* f ) & WORD (1 ));
300255 else
301- return mpz_even_p ( COEFF_TO_PTR (* f ));
256+ return !( FMPZ_TO_ZZ (* f )-> ptr [ 0 ] & 1 );
302257}
303258
304259FMPZ_INLINE
@@ -307,7 +262,7 @@ int fmpz_is_odd(const fmpz_t f)
307262 if (!COEFF_IS_MPZ (* f ))
308263 return ((* f ) & WORD (1 ));
309264 else
310- return mpz_odd_p ( COEFF_TO_PTR (* f ));
265+ return ( FMPZ_TO_ZZ (* f )-> ptr [ 0 ] & 1 );
311266}
312267
313268int fmpz_sgn (const fmpz_t f );
0 commit comments