1 // Copyright © 2017–2021 Trevor Spiteri
2
3 // This program is free software: you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public License
5 // as published by the Free Software Foundation, either version 3 of
6 // the License, or (at your option) any later version.
7 //
8 // This program is distributed in the hope that it will be useful, but
9 // WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License and a copy of the GNU General Public License along with
15 // this program. If not, see <https://www.gnu.org/licenses/>.
16
17 /*!
18 Function and type bindings for the [MPC] library.
19
20 # Examples
21
22 ```rust
23 use core::{f64, mem::MaybeUninit};
24 use gmp_mpfr_sys::{mpc, mpfr};
25 let one_third = 1.0_f64 / 3.0;
26 let neg_inf = f64::NEG_INFINITY;
27 unsafe {
28 let mut c = MaybeUninit::uninit();
29 mpc::init3(c.as_mut_ptr(), 53, 53);
30 let mut c = c.assume_init();
31 let dirs = mpc::set_d_d(&mut c, one_third, neg_inf, mpc::RNDNN);
32 assert_eq!(dirs, 0);
33 let re_ptr = mpc::realref_const(&c);
34 let re = mpfr::get_d(re_ptr, mpfr::rnd_t::RNDN);
35 assert_eq!(re, one_third);
36 let im_ptr = mpc::imagref_const(&c);
37 let im = mpfr::get_d(im_ptr, mpfr::rnd_t::RNDN);
38 assert_eq!(im, neg_inf);
39 mpc::clear(&mut c);
40 }
41 ```
42
43 [MPC]: http://www.multiprecision.org/mpc/
44 */
45 #![allow(non_camel_case_types, non_snake_case)]
46
47 use crate::{
48 gmp::{mpf_t, mpq_t, mpz_t, randstate_t},
49 mpfr::{mpfr_t, prec_t, rnd_t as mpfr_rnd_t},
50 };
51 use libc::{c_char, c_int, c_long, c_ulong, intmax_t, uintmax_t, FILE};
52
53 include!(concat!(env!("OUT_DIR"), "/mpc_h.rs"));
54
55 #[inline]
INEX_NEG(inex: c_int) -> c_int56 extern "C" fn INEX_NEG(inex: c_int) -> c_int {
57 match inex {
58 2 => -1,
59 0 => 0,
60 _ => 1,
61 }
62 }
63 /// See: [Return Value](../C/MPC/constant.GNU_MPC_Basics.html#return_002dvalue)
64 #[inline]
INEX_RE(inex: c_int) -> c_int65 pub extern "C" fn INEX_RE(inex: c_int) -> c_int {
66 INEX_NEG((inex) & 3)
67 }
68 /// See: [Return Value](../C/MPC/constant.GNU_MPC_Basics.html#return_002dvalue)
69 #[inline]
INEX_IM(inex: c_int) -> c_int70 pub extern "C" fn INEX_IM(inex: c_int) -> c_int {
71 INEX_NEG((inex) >> 2)
72 }
73 /// See: [Return Value](../C/MPC/constant.GNU_MPC_Basics.html#return_002dvalue)
74 #[inline]
INEX1(inex: c_int) -> c_int75 pub extern "C" fn INEX1(inex: c_int) -> c_int {
76 inex & 15
77 }
78 /// See: [Return Value](../C/MPC/constant.GNU_MPC_Basics.html#return_002dvalue)
79 #[inline]
INEX2(inex: c_int) -> c_int80 pub extern "C" fn INEX2(inex: c_int) -> c_int {
81 inex >> 4
82 }
83
84 /// See: [`mpc_rnd_t`](../C/MPC/constant.GNU_MPC_Basics.html#index-mpc_005frnd_005ft)
85 pub type rnd_t = c_int;
86
87 const RNDN: c_int = mpfr_rnd_t::RNDN as c_int;
88 const RNDZ: c_int = mpfr_rnd_t::RNDZ as c_int;
89 const RNDU: c_int = mpfr_rnd_t::RNDU as c_int;
90 const RNDD: c_int = mpfr_rnd_t::RNDD as c_int;
91
92 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
93 pub const RNDNN: c_int = RNDN + (RNDN << 4);
94 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
95 pub const RNDNZ: c_int = RNDN + (RNDZ << 4);
96 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
97 pub const RNDNU: c_int = RNDN + (RNDU << 4);
98 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
99 pub const RNDND: c_int = RNDN + (RNDD << 4);
100 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
101 pub const RNDZN: c_int = RNDZ + (RNDN << 4);
102 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
103 pub const RNDZZ: c_int = RNDZ + (RNDZ << 4);
104 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
105 pub const RNDZU: c_int = RNDZ + (RNDU << 4);
106 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
107 pub const RNDZD: c_int = RNDZ + (RNDD << 4);
108 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
109 pub const RNDUN: c_int = RNDU + (RNDN << 4);
110 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
111 pub const RNDUZ: c_int = RNDU + (RNDZ << 4);
112 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
113 pub const RNDUU: c_int = RNDU + (RNDU << 4);
114 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
115 pub const RNDUD: c_int = RNDU + (RNDD << 4);
116 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
117 pub const RNDDN: c_int = RNDD + (RNDN << 4);
118 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
119 pub const RNDDZ: c_int = RNDD + (RNDZ << 4);
120 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
121 pub const RNDDU: c_int = RNDD + (RNDU << 4);
122 /// See: [Rounding Modes](../C/MPC/constant.GNU_MPC_Basics.html#Rounding-Modes)
123 pub const RNDDD: c_int = RNDD + (RNDD << 4);
124
125 /// See: [`mpc_t`](../C/MPC/constant.GNU_MPC_Basics.html#index-mpc_005ft)
126 ///
127 /// # Future compatibility
128 ///
129 /// The fields listed here are considered internal details. These
130 /// internals may change in new minor releases of this crate, though
131 /// they will be kept unchanged for patch releases. Any code that
132 /// makes use of these internals should list the dependency as
133 /// `version = "~1.4"` inside [*Cargo.toml*], *not* `version = "1.4"`.
134 ///
135 /// [*Cargo.toml*]: https://doc.rust-lang.org/cargo/guide/dependencies.html
136 #[repr(C)]
137 #[derive(Clone, Copy, Debug)]
138 pub struct mpc_t {
139 /// Internal implementation detail: real part.
140 pub re: mpfr_t,
141 /// Internal implementation detail: imaginary part.
142 pub im: mpfr_t,
143 }
144
145 // Types for function declarations in this file.
146
147 type mpz_srcptr = *const mpz_t;
148 type mpq_srcptr = *const mpq_t;
149 type mpf_srcptr = *const mpf_t;
150 type randstate_ptr = *mut randstate_t;
151 type mpfr_srcptr = *const mpfr_t;
152 type mpfr_ptr = *mut mpfr_t;
153 type mpc_ptr = *mut mpc_t;
154 type mpc_srcptr = *const mpc_t;
155
156 extern "C" {
157 // Initialization Functions
158
159 /// See: [`mpc_init2`](../C/MPC/constant.Complex_Functions.html#index-mpc_005finit2)
160 #[link_name = "mpc_init2"]
init2(z: mpc_ptr, prec: prec_t)161 pub fn init2(z: mpc_ptr, prec: prec_t);
162 /// See: [`mpc_init3`](../C/MPC/constant.Complex_Functions.html#index-mpc_005finit3)
163 #[link_name = "mpc_init3"]
init3(z: mpc_ptr, prec_r: prec_t, prec_i: prec_t)164 pub fn init3(z: mpc_ptr, prec_r: prec_t, prec_i: prec_t);
165 /// See: [`mpc_clear`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fclear)
166 #[link_name = "mpc_clear"]
clear(z: mpc_ptr)167 pub fn clear(z: mpc_ptr);
168 /// See: [`mpc_set_prec`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fprec)
169 #[link_name = "mpc_set_prec"]
set_prec(x: mpc_ptr, prec: prec_t)170 pub fn set_prec(x: mpc_ptr, prec: prec_t);
171 /// See: [`mpc_get_prec`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fget_005fprec)
172 #[link_name = "mpc_get_prec"]
get_prec(x: mpc_srcptr) -> prec_t173 pub fn get_prec(x: mpc_srcptr) -> prec_t;
174 /// See: [`mpc_get_prec2`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fget_005fprec2)
175 #[link_name = "mpc_get_prec2"]
get_prec2(pr: *mut prec_t, pi: *mut prec_t, x: mpc_srcptr)176 pub fn get_prec2(pr: *mut prec_t, pi: *mut prec_t, x: mpc_srcptr);
177
178 // Assignment Functions
179
180 /// See: [`mpc_set`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset)
181 #[link_name = "mpc_set"]
set(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int182 pub fn set(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
183 /// See: [`mpc_set_ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fui)
184 #[link_name = "mpc_set_ui"]
set_ui(rop: mpc_ptr, op: c_ulong, rnd: rnd_t) -> c_int185 pub fn set_ui(rop: mpc_ptr, op: c_ulong, rnd: rnd_t) -> c_int;
186 /// See: [`mpc_set_si`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fsi)
187 #[link_name = "mpc_set_si"]
set_si(rop: mpc_ptr, op: c_long, rnd: rnd_t) -> c_int188 pub fn set_si(rop: mpc_ptr, op: c_long, rnd: rnd_t) -> c_int;
189 /// See: [`mpc_set_uj`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fuj)
190 #[link_name = "mpc_set_uj"]
set_uj(rop: mpc_ptr, op: uintmax_t, rnd: rnd_t) -> c_int191 pub fn set_uj(rop: mpc_ptr, op: uintmax_t, rnd: rnd_t) -> c_int;
192 /// See: [`mpc_set_sj`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fsj)
193 #[link_name = "mpc_set_sj"]
set_sj(rop: mpc_ptr, op: intmax_t, rnd: rnd_t) -> c_int194 pub fn set_sj(rop: mpc_ptr, op: intmax_t, rnd: rnd_t) -> c_int;
195 /// See: [`mpc_set_d`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fd)
196 #[link_name = "mpc_set_d"]
set_d(rop: mpc_ptr, op: f64, rnd: rnd_t) -> c_int197 pub fn set_d(rop: mpc_ptr, op: f64, rnd: rnd_t) -> c_int;
198 /// See: [`mpc_set_z`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fz)
199 #[link_name = "mpc_set_z"]
set_z(rop: mpc_ptr, op: mpz_srcptr, rnd: rnd_t) -> c_int200 pub fn set_z(rop: mpc_ptr, op: mpz_srcptr, rnd: rnd_t) -> c_int;
201 /// See: [`mpc_set_q`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fq)
202 #[link_name = "mpc_set_q"]
set_q(rop: mpc_ptr, op: mpq_srcptr, rnd: rnd_t) -> c_int203 pub fn set_q(rop: mpc_ptr, op: mpq_srcptr, rnd: rnd_t) -> c_int;
204 /// See: [`mpc_set_f`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005ff)
205 #[link_name = "mpc_set_f"]
set_f(rop: mpc_ptr, op: mpf_srcptr, rnd: rnd_t) -> c_int206 pub fn set_f(rop: mpc_ptr, op: mpf_srcptr, rnd: rnd_t) -> c_int;
207 /// See: [`mpc_set_fr`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005ffr)
208 #[link_name = "mpc_set_fr"]
set_fr(rop: mpc_ptr, op: mpfr_srcptr, rnd: rnd_t) -> c_int209 pub fn set_fr(rop: mpc_ptr, op: mpfr_srcptr, rnd: rnd_t) -> c_int;
210 /// See: [`mpc_set_ui_ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fui_005fui)
211 #[link_name = "mpc_set_ui_ui"]
set_ui_ui(rop: mpc_ptr, op1: c_ulong, op2: c_ulong, rnd: rnd_t) -> c_int212 pub fn set_ui_ui(rop: mpc_ptr, op1: c_ulong, op2: c_ulong, rnd: rnd_t) -> c_int;
213 /// See: [`mpc_set_si_si`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fsi_005fsi)
214 #[link_name = "mpc_set_si_si"]
set_si_si(rop: mpc_ptr, op1: c_long, op2: c_long, rnd: rnd_t) -> c_int215 pub fn set_si_si(rop: mpc_ptr, op1: c_long, op2: c_long, rnd: rnd_t) -> c_int;
216 /// See: [`mpc_set_uj_uj`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fuj_005fuj)
217 #[link_name = "mpc_set_uj_uj"]
set_uj_uj(rop: mpc_ptr, op1: uintmax_t, op2: uintmax_t, rnd: rnd_t) -> c_int218 pub fn set_uj_uj(rop: mpc_ptr, op1: uintmax_t, op2: uintmax_t, rnd: rnd_t) -> c_int;
219 /// See: [`mpc_set_sj_sj`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fsj_005fsj)
220 #[link_name = "mpc_set_sj_sj"]
set_sj_sj(rop: mpc_ptr, op1: intmax_t, op2: intmax_t, rnd: rnd_t) -> c_int221 pub fn set_sj_sj(rop: mpc_ptr, op1: intmax_t, op2: intmax_t, rnd: rnd_t) -> c_int;
222 /// See: [`mpc_set_d_d`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fd_005fd)
223 #[link_name = "mpc_set_d_d"]
set_d_d(rop: mpc_ptr, op1: f64, op2: f64, rnd: rnd_t) -> c_int224 pub fn set_d_d(rop: mpc_ptr, op1: f64, op2: f64, rnd: rnd_t) -> c_int;
225 /// See: [`mpc_set_z_z`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fz_005fz)
226 #[link_name = "mpc_set_z_z"]
set_z_z(rop: mpc_ptr, op1: mpz_srcptr, op2: mpz_srcptr, rnd: rnd_t) -> c_int227 pub fn set_z_z(rop: mpc_ptr, op1: mpz_srcptr, op2: mpz_srcptr, rnd: rnd_t) -> c_int;
228 /// See: [`mpc_set_q_q`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fq_005fq)
229 #[link_name = "mpc_set_q_q"]
set_q_q(rop: mpc_ptr, op1: mpq_srcptr, op2: mpq_srcptr, rnd: rnd_t) -> c_int230 pub fn set_q_q(rop: mpc_ptr, op1: mpq_srcptr, op2: mpq_srcptr, rnd: rnd_t) -> c_int;
231 /// See: [`mpc_set_f_f`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005ff_005ff)
232 #[link_name = "mpc_set_f_f"]
set_f_f(rop: mpc_ptr, op1: mpf_srcptr, op2: mpf_srcptr, rnd: rnd_t) -> c_int233 pub fn set_f_f(rop: mpc_ptr, op1: mpf_srcptr, op2: mpf_srcptr, rnd: rnd_t) -> c_int;
234 /// See: [`mpc_set_fr_fr`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005ffr_005ffr)
235 #[link_name = "mpc_set_fr_fr"]
set_fr_fr(rop: mpc_ptr, op1: mpfr_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int236 pub fn set_fr_fr(rop: mpc_ptr, op1: mpfr_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int;
237 /// See: [`mpc_set_nan`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fnan)
238 #[link_name = "mpc_set_nan"]
set_nan(rop: mpc_ptr)239 pub fn set_nan(rop: mpc_ptr);
240 /// See: [`mpc_swap`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fswap)
241 #[link_name = "mpc_swap"]
swap(op1: mpc_ptr, op2: mpc_ptr)242 pub fn swap(op1: mpc_ptr, op2: mpc_ptr);
243
244 // String and Stream Input and Output
245
246 /// See: [`mpc_strtoc`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fstrtoc)
247 #[link_name = "mpc_strtoc"]
strtoc( rop: mpc_ptr, nptr: *const c_char, endptr: *mut *mut c_char, base: c_int, rnd: rnd_t, ) -> c_int248 pub fn strtoc(
249 rop: mpc_ptr,
250 nptr: *const c_char,
251 endptr: *mut *mut c_char,
252 base: c_int,
253 rnd: rnd_t,
254 ) -> c_int;
255 /// See: [`mpc_set_str`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fset_005fstr)
256 #[link_name = "mpc_set_str"]
set_str(rop: mpc_ptr, s: *const c_char, base: c_int, rnd: rnd_t) -> c_int257 pub fn set_str(rop: mpc_ptr, s: *const c_char, base: c_int, rnd: rnd_t) -> c_int;
258 /// See: [`mpc_get_str`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fget_005fstr)
259 #[link_name = "mpc_get_str"]
get_str(b: c_int, n: usize, op: mpc_srcptr, rnd: rnd_t) -> *mut c_char260 pub fn get_str(b: c_int, n: usize, op: mpc_srcptr, rnd: rnd_t) -> *mut c_char;
261 /// See: [`mpc_free_str`](../C/MPC/constant.Complex_Functions.html#index-mpc_005ffree_005fstr)
262 #[link_name = "mpc_free_str"]
free_str(rop: *mut c_char)263 pub fn free_str(rop: *mut c_char);
264 /// See: [`mpc_inp_str`](../C/MPC/constant.Complex_Functions.html#index-mpc_005finp_005fstr)
265 #[link_name = "mpc_inp_str"]
inp_str( rop: mpc_ptr, stream: *mut FILE, read: *mut usize, base: c_int, rnd: rnd_t, ) -> c_int266 pub fn inp_str(
267 rop: mpc_ptr,
268 stream: *mut FILE,
269 read: *mut usize,
270 base: c_int,
271 rnd: rnd_t,
272 ) -> c_int;
273 /// See: [`mpc_out_str`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fout_005fstr)
274 #[link_name = "mpc_out_str"]
out_str( stream: *mut FILE, base: c_int, n_digits: usize, op: mpc_srcptr, rnd: rnd_t, ) -> usize275 pub fn out_str(
276 stream: *mut FILE,
277 base: c_int,
278 n_digits: usize,
279 op: mpc_srcptr,
280 rnd: rnd_t,
281 ) -> usize;
282
283 // Comparison Functions
284
285 /// See: [`mpc_cmp`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fcmp)
286 #[link_name = "mpc_cmp"]
cmp(op1: mpc_srcptr, op2: mpc_srcptr) -> c_int287 pub fn cmp(op1: mpc_srcptr, op2: mpc_srcptr) -> c_int;
288 /// See: [`mpc_cmp_si_si`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fcmp_005fsi_005fsi)
289 #[link_name = "mpc_cmp_si_si"]
cmp_si_si(op1: mpc_srcptr, op2r: c_long, op2i: c_long) -> c_int290 pub fn cmp_si_si(op1: mpc_srcptr, op2r: c_long, op2i: c_long) -> c_int;
291 }
292 /// See: [`mpc_cmp_si`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fcmp_005fsi)
293 #[inline]
cmp_si(op1: mpc_srcptr, op2: c_long) -> c_int294 pub unsafe extern "C" fn cmp_si(op1: mpc_srcptr, op2: c_long) -> c_int {
295 unsafe { cmp_si_si(op1, op2, 0) }
296 }
297 extern "C" {
298 /// See: [`mpc_cmp_abs`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fcmp_005fabs)
299 #[link_name = "mpc_cmp_abs"]
cmp_abs(op1: mpc_srcptr, op2: mpc_srcptr) -> c_int300 pub fn cmp_abs(op1: mpc_srcptr, op2: mpc_srcptr) -> c_int;
301
302 // Projection and Decomposing Functions
303 /// See: [`mpc_real`](../C/MPC/constant.Complex_Functions.html#index-mpc_005freal)
304 #[link_name = "mpc_real"]
real(rop: mpfr_ptr, arg2: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int305 pub fn real(rop: mpfr_ptr, arg2: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int;
306 /// See: [`mpc_imag`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fimag)
307 #[link_name = "mpc_imag"]
imag(rop: mpfr_ptr, arg2: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int308 pub fn imag(rop: mpfr_ptr, arg2: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int;
309 }
310 /// See: [`mpc_realref`](../C/MPC/constant.Complex_Functions.html#index-mpc_005frealref)
311 #[inline]
realref(op: mpc_ptr) -> mpfr_ptr312 pub unsafe extern "C" fn realref(op: mpc_ptr) -> mpfr_ptr {
313 op as mpfr_ptr
314 }
315 /// Constant version of [`realref`](fn.realref.html).
316 #[inline]
realref_const(op: mpc_srcptr) -> mpfr_srcptr317 pub unsafe extern "C" fn realref_const(op: mpc_srcptr) -> mpfr_srcptr {
318 op as mpfr_srcptr
319 }
320 /// See: [`mpc_imagref`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fimagref)
321 #[inline]
imagref(op: mpc_ptr) -> mpfr_ptr322 pub unsafe extern "C" fn imagref(op: mpc_ptr) -> mpfr_ptr {
323 unsafe { (op as mpfr_ptr).offset(1) }
324 }
325 /// Constant version of [`imagref`](fn.imagref.html).
326 #[inline]
imagref_const(op: mpc_srcptr) -> mpfr_srcptr327 pub unsafe extern "C" fn imagref_const(op: mpc_srcptr) -> mpfr_srcptr {
328 unsafe { (op as mpfr_srcptr).offset(1) }
329 }
330 extern "C" {
331 /// See: [`mpc_arg`](../C/MPC/constant.Complex_Functions.html#index-mpc_005farg)
332 #[link_name = "mpc_arg"]
arg(rop: mpfr_ptr, op: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int333 pub fn arg(rop: mpfr_ptr, op: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int;
334 /// See: [`mpc_proj`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fproj)
335 #[link_name = "mpc_proj"]
proj(rop: mpc_ptr, arg2: mpc_srcptr, rnd: rnd_t) -> c_int336 pub fn proj(rop: mpc_ptr, arg2: mpc_srcptr, rnd: rnd_t) -> c_int;
337
338 // Basic Arithmetic Functions
339
340 /// See: [`mpc_add`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fadd)
341 #[link_name = "mpc_add"]
add(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int342 pub fn add(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int;
343 /// See: [`mpc_add_ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fadd_005fui)
344 #[link_name = "mpc_add_ui"]
add_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int345 pub fn add_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int;
346 /// See: [`mpc_add_fr`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fadd_005ffr)
347 #[link_name = "mpc_add_fr"]
add_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int348 pub fn add_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int;
349 /// See: [`mpc_fr_sub`](../C/MPC/constant.Complex_Functions.html#index-mpc_005ffr_005fsub)
350 #[link_name = "mpc_sub"]
sub(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int351 pub fn sub(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int;
352 /// See: [`mpc_sub_fr`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fsub_005ffr)
353 #[link_name = "mpc_sub_fr"]
sub_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int354 pub fn sub_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int;
355 /// See: [`mpc_fr_sub`](../C/MPC/constant.Complex_Functions.html#index-mpc_005ffr_005fsub)
356 #[link_name = "mpc_fr_sub"]
fr_sub(rop: mpc_ptr, op1: mpfr_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int357 pub fn fr_sub(rop: mpc_ptr, op1: mpfr_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int;
358 /// See: [`mpc_sub_ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fsub_005fui)
359 #[link_name = "mpc_sub_ui"]
sub_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int360 pub fn sub_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int;
361 }
362 /// See: [`mpc_ui_sub`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fui_005fsub)
363 #[inline]
ui_sub(rop: mpc_ptr, op1: c_ulong, op2: mpc_srcptr, rnd: rnd_t) -> c_int364 pub unsafe extern "C" fn ui_sub(rop: mpc_ptr, op1: c_ulong, op2: mpc_srcptr, rnd: rnd_t) -> c_int {
365 unsafe { ui_ui_sub(rop, op1, 0, op2, rnd) }
366 }
367 extern "C" {
368 /// See: [`mpc_ui_ui_sub`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fui_005fui_005fsub)
369 #[link_name = "mpc_ui_ui_sub"]
ui_ui_sub( rop: mpc_ptr, re1: c_ulong, im1: c_ulong, op2: mpc_srcptr, rnd: rnd_t, ) -> c_int370 pub fn ui_ui_sub(
371 rop: mpc_ptr,
372 re1: c_ulong,
373 im1: c_ulong,
374 op2: mpc_srcptr,
375 rnd: rnd_t,
376 ) -> c_int;
377 /// See: [`mpc_neg`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fneg)
378 #[link_name = "mpc_neg"]
neg(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int379 pub fn neg(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
380 /// See: [`mpc_sum`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fsum)
381 #[link_name = "mpc_sum"]
sum(rop: mpc_ptr, op: *const mpc_ptr, n: c_ulong, rnd: rnd_t) -> c_int382 pub fn sum(rop: mpc_ptr, op: *const mpc_ptr, n: c_ulong, rnd: rnd_t) -> c_int;
383 /// See: [`mpc_mul`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fmul)
384 #[link_name = "mpc_mul"]
mul(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int385 pub fn mul(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int;
386 /// See: [`mpc_mul_ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fmul_005fui)
387 #[link_name = "mpc_mul_ui"]
mul_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int388 pub fn mul_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int;
389 /// See: [`mpc_mul_si`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fmul_005fsi)
390 #[link_name = "mpc_mul_si"]
mul_si(rop: mpc_ptr, op1: mpc_srcptr, op2: c_long, rnd: rnd_t) -> c_int391 pub fn mul_si(rop: mpc_ptr, op1: mpc_srcptr, op2: c_long, rnd: rnd_t) -> c_int;
392 /// See: [`mpc_mul_fr`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fmul_005ffr)
393 #[link_name = "mpc_mul_fr"]
mul_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int394 pub fn mul_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int;
395 /// See: [`mpc_mul_i`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fmul_005fi)
396 #[link_name = "mpc_mul_i"]
mul_i(rop: mpc_ptr, op: mpc_srcptr, sgn: c_int, rnd: rnd_t) -> c_int397 pub fn mul_i(rop: mpc_ptr, op: mpc_srcptr, sgn: c_int, rnd: rnd_t) -> c_int;
398 /// See: [`mpc_sqr`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fsqr)
399 #[link_name = "mpc_sqr"]
sqr(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int400 pub fn sqr(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
401 /// See: [`mpc_fma`](../C/MPC/constant.Complex_Functions.html#index-mpc_005ffma)
402 #[link_name = "mpc_fma"]
fma( rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, op3: mpc_srcptr, rnd: rnd_t, ) -> c_int403 pub fn fma(
404 rop: mpc_ptr,
405 op1: mpc_srcptr,
406 op2: mpc_srcptr,
407 op3: mpc_srcptr,
408 rnd: rnd_t,
409 ) -> c_int;
410 /// See: [`mpc_dot`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fdot)
411 #[link_name = "mpc_dot"]
dot( rop: mpc_ptr, op1: *const mpc_ptr, op2: *const mpc_ptr, n: c_ulong, rnd: rnd_t, ) -> c_int412 pub fn dot(
413 rop: mpc_ptr,
414 op1: *const mpc_ptr,
415 op2: *const mpc_ptr,
416 n: c_ulong,
417 rnd: rnd_t,
418 ) -> c_int;
419 /// See: [`mpc_div`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fdiv)
420 #[link_name = "mpc_div"]
div(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int421 pub fn div(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int;
422 /// See: [`mpc_div_ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fdiv_005fui)
423 #[link_name = "mpc_div_ui"]
div_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int424 pub fn div_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int;
425 /// See: [`mpc_div_fr`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fdiv_005ffr)
426 #[link_name = "mpc_div_fr"]
div_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int427 pub fn div_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int;
428 /// See: [`mpc_ui_div`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fui_005fdiv)
429 #[link_name = "mpc_ui_div"]
ui_div(rop: mpc_ptr, op1: c_ulong, op2: mpc_srcptr, rnd: rnd_t) -> c_int430 pub fn ui_div(rop: mpc_ptr, op1: c_ulong, op2: mpc_srcptr, rnd: rnd_t) -> c_int;
431 /// See: [`mpc_fr_div`](../C/MPC/constant.Complex_Functions.html#index-mpc_005ffr_005fdiv)
432 #[link_name = "mpc_fr_div"]
fr_div(rop: mpc_ptr, op1: mpfr_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int433 pub fn fr_div(rop: mpc_ptr, op1: mpfr_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int;
434 /// See: [`mpc_conj`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fconj)
435 #[link_name = "mpc_conj"]
conj(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int436 pub fn conj(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
437 /// See: [`mpc_abs`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fabs)
438 #[link_name = "mpc_abs"]
abs(rop: mpfr_ptr, op: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int439 pub fn abs(rop: mpfr_ptr, op: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int;
440 /// See: [`mpc_norm`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fnorm)
441 #[link_name = "mpc_norm"]
norm(rop: mpfr_ptr, op: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int442 pub fn norm(rop: mpfr_ptr, op: mpc_srcptr, rnd: mpfr_rnd_t) -> c_int;
443 /// See: [`mpc_mul_2ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fmul_005f2ui)
444 #[link_name = "mpc_mul_2ui"]
mul_2ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int445 pub fn mul_2ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int;
446 /// See: [`mpc_mul_2si`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fmul_005f2si)
447 #[link_name = "mpc_mul_2si"]
mul_2si(rop: mpc_ptr, op1: mpc_srcptr, op2: c_long, rnd: rnd_t) -> c_int448 pub fn mul_2si(rop: mpc_ptr, op1: mpc_srcptr, op2: c_long, rnd: rnd_t) -> c_int;
449 /// See: [`mpc_div_2ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fdiv_005f2ui)
450 #[link_name = "mpc_div_2ui"]
div_2ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int451 pub fn div_2ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int;
452 /// See: [`mpc_div_2si`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fdiv_005f2si)
453 #[link_name = "mpc_div_2si"]
div_2si(rop: mpc_ptr, op1: mpc_srcptr, op2: c_long, rnd: rnd_t) -> c_int454 pub fn div_2si(rop: mpc_ptr, op1: mpc_srcptr, op2: c_long, rnd: rnd_t) -> c_int;
455
456 // Power Functions and Logarithms
457
458 /// See: [`mpc_sqrt`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fsqrt)
459 #[link_name = "mpc_sqrt"]
sqrt(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int460 pub fn sqrt(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
461 /// See: [`mpc_pow`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fpow)
462 #[link_name = "mpc_pow"]
pow(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int463 pub fn pow(rop: mpc_ptr, op1: mpc_srcptr, op2: mpc_srcptr, rnd: rnd_t) -> c_int;
464 /// See: [`mpc_pow_d`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fpow_005fd)
465 #[link_name = "mpc_pow_d"]
pow_d(rop: mpc_ptr, op1: mpc_srcptr, op2: f64, rnd: rnd_t) -> c_int466 pub fn pow_d(rop: mpc_ptr, op1: mpc_srcptr, op2: f64, rnd: rnd_t) -> c_int;
467 /// See: [`mpc_pow_si`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fpow_005fsi)
468 #[link_name = "mpc_pow_si"]
pow_si(rop: mpc_ptr, op1: mpc_srcptr, op2: c_long, rnd: rnd_t) -> c_int469 pub fn pow_si(rop: mpc_ptr, op1: mpc_srcptr, op2: c_long, rnd: rnd_t) -> c_int;
470 /// See: [`mpc_pow_ui`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fpow_005fui)
471 #[link_name = "mpc_pow_ui"]
pow_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int472 pub fn pow_ui(rop: mpc_ptr, op1: mpc_srcptr, op2: c_ulong, rnd: rnd_t) -> c_int;
473 /// See: [`mpc_pow_z`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fpow_005fz)
474 #[link_name = "mpc_pow_z"]
pow_z(rop: mpc_ptr, op1: mpc_srcptr, op2: mpz_srcptr, rnd: rnd_t) -> c_int475 pub fn pow_z(rop: mpc_ptr, op1: mpc_srcptr, op2: mpz_srcptr, rnd: rnd_t) -> c_int;
476 /// See: [`mpc_pow_fr`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fpow_005ffr)
477 #[link_name = "mpc_pow_fr"]
pow_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int478 pub fn pow_fr(rop: mpc_ptr, op1: mpc_srcptr, op2: mpfr_srcptr, rnd: rnd_t) -> c_int;
479 /// See: [`mpc_exp`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fexp)
480 #[link_name = "mpc_exp"]
exp(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int481 pub fn exp(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
482 /// See: [`mpc_log`](../C/MPC/constant.Complex_Functions.html#index-mpc_005flog)
483 #[link_name = "mpc_log"]
log(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int484 pub fn log(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
485 /// See: [`mpc_log10`](../C/MPC/constant.Complex_Functions.html#index-mpc_005flog10)
486 #[link_name = "mpc_log10"]
log10(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int487 pub fn log10(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
488 /// See: [`mpc_rootofunity`](../C/MPC/constant.Complex_Functions.html#index-mpc_005frootofunity)
489 #[link_name = "mpc_rootofunity"]
rootofunity(rop: mpc_ptr, n: c_ulong, k: c_ulong, rnd: rnd_t) -> c_int490 pub fn rootofunity(rop: mpc_ptr, n: c_ulong, k: c_ulong, rnd: rnd_t) -> c_int;
491
492 // Trigonometric Functions
493
494 /// See: [`mpc_sin`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fsin)
495 #[link_name = "mpc_sin"]
sin(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int496 pub fn sin(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
497 /// See: [`mpc_cos`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fcos)
498 #[link_name = "mpc_cos"]
cos(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int499 pub fn cos(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
500 /// See: [`mpc_sin_cos`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fsin_005fcos)
501 #[link_name = "mpc_sin_cos"]
sin_cos( rop_sin: mpc_ptr, rop_cos: mpc_ptr, op: mpc_srcptr, rnd_sin: rnd_t, rnd_cos: rnd_t, ) -> c_int502 pub fn sin_cos(
503 rop_sin: mpc_ptr,
504 rop_cos: mpc_ptr,
505 op: mpc_srcptr,
506 rnd_sin: rnd_t,
507 rnd_cos: rnd_t,
508 ) -> c_int;
509 /// See: [`mpc_tan`](../C/MPC/constant.Complex_Functions.html#index-mpc_005ftan)
510 #[link_name = "mpc_tan"]
tan(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int511 pub fn tan(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
512 /// See: [`mpc_sinh`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fsinh)
513 #[link_name = "mpc_sinh"]
sinh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int514 pub fn sinh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
515 /// See: [`mpc_cosh`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fcosh)
516 #[link_name = "mpc_cosh"]
cosh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int517 pub fn cosh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
518 /// See: [`mpc_tanh`](../C/MPC/constant.Complex_Functions.html#index-mpc_005ftanh)
519 #[link_name = "mpc_tanh"]
tanh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int520 pub fn tanh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
521 /// See: [`mpc_asin`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fasin)
522 #[link_name = "mpc_asin"]
asin(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int523 pub fn asin(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
524 /// See: [`mpc_acos`](../C/MPC/constant.Complex_Functions.html#index-mpc_005facos)
525 #[link_name = "mpc_acos"]
acos(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int526 pub fn acos(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
527 /// See: [`mpc_atan`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fatan)
528 #[link_name = "mpc_atan"]
atan(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int529 pub fn atan(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
530 /// See: [`mpc_asinh`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fasinh)
531 #[link_name = "mpc_asinh"]
asinh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int532 pub fn asinh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
533 /// See: [`mpc_acosh`](../C/MPC/constant.Complex_Functions.html#index-mpc_005facosh)
534 #[link_name = "mpc_acosh"]
acosh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int535 pub fn acosh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
536 /// See: [`mpc_atanh`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fatanh)
537 #[link_name = "mpc_atanh"]
atanh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int538 pub fn atanh(rop: mpc_ptr, op: mpc_srcptr, rnd: rnd_t) -> c_int;
539
540 // Miscellaneous Functions
541
542 /// See: [`mpc_urandom`](../C/MPC/constant.Complex_Functions.html#index-mpc_005furandom)
543 #[link_name = "mpc_urandom"]
urandom(rop: mpc_ptr, state: randstate_ptr) -> c_int544 pub fn urandom(rop: mpc_ptr, state: randstate_ptr) -> c_int;
545 /// See: [`mpc_get_version`](../C/MPC/constant.Complex_Functions.html#index-mpc_005fget_005fversion)
546 #[link_name = "mpc_get_version"]
get_version() -> *const c_char547 pub fn get_version() -> *const c_char;
548 }
549 /// See: [`MPC_VERSION`](../C/MPC/constant.Complex_Functions.html#index-MPC_005fVERSION)
550 pub const VERSION: c_int = (VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | VERSION_PATCHLEVEL;
551 /// See: [`MPC_VERSION_MAJOR`](../C/MPC/constant.Complex_Functions.html#index-MPC_005fVERSION_005fMAJOR)
552 pub const VERSION_MAJOR: c_int = MPC_VERSION_MAJOR;
553 /// See: [`MPC_VERSION_MINOR`](../C/MPC/constant.Complex_Functions.html#index-MPC_005fVERSION_005fMINOR)
554 pub const VERSION_MINOR: c_int = MPC_VERSION_MINOR;
555 /// See: [`MPC_VERSION_PATCHLEVEL`](../C/MPC/constant.Complex_Functions.html#index-MPC_005fVERSION_005fPATCHLEVEL)
556 pub const VERSION_PATCHLEVEL: c_int = MPC_VERSION_PATCHLEVEL;
557 /// See: [`MPC_VERSION_STRING`](../C/MPC/constant.Complex_Functions.html#index-MPC_005fVERSION_005fSTRING)
558 pub const VERSION_STRING: *const c_char = MPC_VERSION_STRING;
559 /// See: [`MPC_VERSION_NUM`](../C/MPC/constant.Complex_Functions.html#index-MPC_005fVERSION_005fNUM)
560 #[inline]
VERSION_NUM(major: c_int, minor: c_int, patchlevel: c_int) -> c_int561 pub extern "C" fn VERSION_NUM(major: c_int, minor: c_int, patchlevel: c_int) -> c_int {
562 (major << 16) | (minor << 8) | patchlevel
563 }
564
565 #[cfg(test)]
566 mod tests {
567 use crate::{gmp, mpc, mpfr};
568 use core::ptr::NonNull;
569
570 #[test]
check_real_imag_offsets()571 fn check_real_imag_offsets() {
572 let mut limbs: [gmp::limb_t; 2] = [1 << (gmp::LIMB_BITS - 1), 1 << (gmp::LIMB_BITS - 1)];
573 let mut c = mpc::mpc_t {
574 re: mpfr::mpfr_t {
575 prec: 1,
576 sign: 1,
577 exp: 0,
578 d: NonNull::from(&mut limbs[0]),
579 },
580 im: mpfr::mpfr_t {
581 prec: 1,
582 sign: 1,
583 exp: 0,
584 d: NonNull::from(&mut limbs[1]),
585 },
586 };
587 unsafe {
588 assert_eq!(&c.re as *const mpfr::mpfr_t, mpc::realref_const(&c));
589 assert_eq!(&c.im as *const mpfr::mpfr_t, mpc::imagref_const(&c));
590 assert_eq!(&mut c.re as *mut mpfr::mpfr_t, mpc::realref(&mut c));
591 assert_eq!(&mut c.im as *mut mpfr::mpfr_t, mpc::imagref(&mut c));
592 }
593 }
594
595 #[test]
check_version()596 fn check_version() {
597 use crate::tests;
598
599 let (major, minor, patchlevel) = (1, 2, 1);
600 let version = "1.2.1";
601
602 assert_eq!(mpc::VERSION_MAJOR, major);
603 assert!(mpc::VERSION_MINOR >= minor);
604 if cfg!(not(feature = "use-system-libs")) {
605 assert!(mpc::VERSION_MINOR > minor || mpc::VERSION_PATCHLEVEL >= patchlevel);
606 if mpc::VERSION_MINOR == minor && mpc::VERSION_PATCHLEVEL == patchlevel {
607 assert_eq!(unsafe { tests::str_from_cstr(mpc::get_version()) }, version);
608 assert_eq!(
609 unsafe { tests::str_from_cstr(mpc::VERSION_STRING) },
610 version
611 );
612 }
613 }
614 }
615 }
616