I need to call a MPFR library function whose signature is int mpfr_sub_ui(mpfr_t rop, mpfr_t op1, unsigned long int op2, mpfr_rnd_t rnd)
.
The manual says that unsigned long
is an Int on Unix and an Int32 on Windows. Is there a way to ccall
the library function that works on both Unix and Windows?
Culong
should do the right thing:
julia> Culong
UInt64
1 Like
The library has also function mpfr_sub_si
with signature long int
. What I should have asked is how should the Julia wrappers be defined.
function mpfr_sub(rop::BigFloat, op1::BigFloat, op2::UInt, rnd) # for unsigned long int
ccall((:mpfr_sub_ui, :libmpfr), Int32,
(Ref{BigFloat}, Ref{BigFloat}, Culong, MPFR.MPFRRoundingMode),
rop, op1, op2, rnd)
end
and
function mpfr_sub(rop::BigFloat, op1::BigFloat, op2::Int, rnd) # for long int
ccall((:mpfr_sub_si, :libmpfr), Int32,
(Ref{BigFloat}, Ref{BigFloat}, Clong, MPFR.MPFRRoundingMode),
rop, op1, op2, rnd)
end
Julia’s MPFR
module in Base
uses ClongMax
and CulongMax
defined in GMP
:
julia> Base.GMP.CulongMax
Union{UInt16, UInt32, UInt8}
julia> Base.GMP.ClongMax
Union{Int16, Int32, Int8}
Because you are on a Unix-like system? On Windows, I get:
julia> Culong
UInt32