Skip to main content

flint_sys/
nmod.rs

1/* automatically generated by rust-bindgen 0.70.1 */
2
3use crate::deps::*;
4use crate::flint::*;
5use crate::gr_types::*;
6
7
8pub type ull_t = __uint128_t;
9#[repr(C)]
10pub struct nmod_redc_ctx_struct {
11    pub mod_: nmod_t,
12    pub nred: ulong,
13}
14#[allow(clippy::unnecessary_operation, clippy::identity_op)]
15const _: () = {
16    ["Size of nmod_redc_ctx_struct"][::std::mem::size_of::<nmod_redc_ctx_struct>() - 32usize];
17    ["Alignment of nmod_redc_ctx_struct"][::std::mem::align_of::<nmod_redc_ctx_struct>() - 8usize];
18    ["Offset of field: nmod_redc_ctx_struct::mod_"]
19        [::std::mem::offset_of!(nmod_redc_ctx_struct, mod_) - 0usize];
20    ["Offset of field: nmod_redc_ctx_struct::nred"]
21        [::std::mem::offset_of!(nmod_redc_ctx_struct, nred) - 24usize];
22};
23impl Default for nmod_redc_ctx_struct {
24    fn default() -> Self {
25        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
26        unsafe {
27            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
28            s.assume_init()
29        }
30    }
31}
32pub type nmod_redc_ctx_t = [nmod_redc_ctx_struct; 1usize];
33#[repr(C)]
34pub struct _gr_nmod_ctx_struct {
35    pub nmod: nmod_t,
36    pub a: ulong,
37    pub is_prime: truth_t,
38}
39#[allow(clippy::unnecessary_operation, clippy::identity_op)]
40const _: () = {
41    ["Size of _gr_nmod_ctx_struct"][::std::mem::size_of::<_gr_nmod_ctx_struct>() - 40usize];
42    ["Alignment of _gr_nmod_ctx_struct"][::std::mem::align_of::<_gr_nmod_ctx_struct>() - 8usize];
43    ["Offset of field: _gr_nmod_ctx_struct::nmod"]
44        [::std::mem::offset_of!(_gr_nmod_ctx_struct, nmod) - 0usize];
45    ["Offset of field: _gr_nmod_ctx_struct::a"]
46        [::std::mem::offset_of!(_gr_nmod_ctx_struct, a) - 24usize];
47    ["Offset of field: _gr_nmod_ctx_struct::is_prime"]
48        [::std::mem::offset_of!(_gr_nmod_ctx_struct, is_prime) - 32usize];
49};
50impl Default for _gr_nmod_ctx_struct {
51    fn default() -> Self {
52        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
53        unsafe {
54            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
55            s.assume_init()
56        }
57    }
58}
59#[repr(C)]
60pub struct _gr_nmod_redc_ctx_struct {
61    pub ctx: nmod_redc_ctx_struct,
62    pub one: ulong,
63    pub is_prime: truth_t,
64}
65#[allow(clippy::unnecessary_operation, clippy::identity_op)]
66const _: () = {
67    ["Size of _gr_nmod_redc_ctx_struct"]
68        [::std::mem::size_of::<_gr_nmod_redc_ctx_struct>() - 48usize];
69    ["Alignment of _gr_nmod_redc_ctx_struct"]
70        [::std::mem::align_of::<_gr_nmod_redc_ctx_struct>() - 8usize];
71    ["Offset of field: _gr_nmod_redc_ctx_struct::ctx"]
72        [::std::mem::offset_of!(_gr_nmod_redc_ctx_struct, ctx) - 0usize];
73    ["Offset of field: _gr_nmod_redc_ctx_struct::one"]
74        [::std::mem::offset_of!(_gr_nmod_redc_ctx_struct, one) - 32usize];
75    ["Offset of field: _gr_nmod_redc_ctx_struct::is_prime"]
76        [::std::mem::offset_of!(_gr_nmod_redc_ctx_struct, is_prime) - 40usize];
77};
78impl Default for _gr_nmod_redc_ctx_struct {
79    fn default() -> Self {
80        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
81        unsafe {
82            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
83            s.assume_init()
84        }
85    }
86}
87#[repr(C)]
88pub struct nmod_discrete_log_pohlig_hellman_table_entry_struct {
89    pub gammapow: ulong,
90    pub cm: ulong,
91}
92#[allow(clippy::unnecessary_operation, clippy::identity_op)]
93const _: () = {
94    ["Size of nmod_discrete_log_pohlig_hellman_table_entry_struct"]
95        [::std::mem::size_of::<nmod_discrete_log_pohlig_hellman_table_entry_struct>() - 16usize];
96    ["Alignment of nmod_discrete_log_pohlig_hellman_table_entry_struct"]
97        [::std::mem::align_of::<nmod_discrete_log_pohlig_hellman_table_entry_struct>() - 8usize];
98    ["Offset of field: nmod_discrete_log_pohlig_hellman_table_entry_struct::gammapow"][::std::mem::offset_of!(
99        nmod_discrete_log_pohlig_hellman_table_entry_struct,
100        gammapow
101    ) - 0usize];
102    ["Offset of field: nmod_discrete_log_pohlig_hellman_table_entry_struct::cm"]
103        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_table_entry_struct, cm) - 8usize];
104};
105impl Default for nmod_discrete_log_pohlig_hellman_table_entry_struct {
106    fn default() -> Self {
107        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
108        unsafe {
109            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
110            s.assume_init()
111        }
112    }
113}
114#[repr(C)]
115pub struct nmod_discrete_log_pohlig_hellman_entry_struct {
116    pub exp: slong,
117    pub prime: ulong,
118    pub gamma: ulong,
119    pub gammainv: ulong,
120    pub startingbeta: ulong,
121    pub co: ulong,
122    pub startinge: ulong,
123    pub idem: ulong,
124    pub cbound: ulong,
125    pub dbound: ulong,
126    pub table: *mut nmod_discrete_log_pohlig_hellman_table_entry_struct,
127}
128#[allow(clippy::unnecessary_operation, clippy::identity_op)]
129const _: () = {
130    ["Size of nmod_discrete_log_pohlig_hellman_entry_struct"]
131        [::std::mem::size_of::<nmod_discrete_log_pohlig_hellman_entry_struct>() - 88usize];
132    ["Alignment of nmod_discrete_log_pohlig_hellman_entry_struct"]
133        [::std::mem::align_of::<nmod_discrete_log_pohlig_hellman_entry_struct>() - 8usize];
134    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::exp"]
135        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, exp) - 0usize];
136    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::prime"]
137        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, prime) - 8usize];
138    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::gamma"]
139        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, gamma) - 16usize];
140    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::gammainv"]
141        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, gammainv) - 24usize];
142    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::startingbeta"][::std::mem::offset_of!(
143        nmod_discrete_log_pohlig_hellman_entry_struct,
144        startingbeta
145    ) - 32usize];
146    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::co"]
147        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, co) - 40usize];
148    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::startinge"][::std::mem::offset_of!(
149        nmod_discrete_log_pohlig_hellman_entry_struct,
150        startinge
151    ) - 48usize];
152    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::idem"]
153        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, idem) - 56usize];
154    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::cbound"]
155        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, cbound) - 64usize];
156    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::dbound"]
157        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, dbound) - 72usize];
158    ["Offset of field: nmod_discrete_log_pohlig_hellman_entry_struct::table"]
159        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_entry_struct, table) - 80usize];
160};
161impl Default for nmod_discrete_log_pohlig_hellman_entry_struct {
162    fn default() -> Self {
163        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
164        unsafe {
165            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
166            s.assume_init()
167        }
168    }
169}
170#[repr(C)]
171pub struct nmod_discrete_log_pohlig_hellman_struct {
172    pub mod_: nmod_t,
173    pub alpha: ulong,
174    pub alphainv: ulong,
175    pub num_factors: slong,
176    pub entries: *mut nmod_discrete_log_pohlig_hellman_entry_struct,
177}
178#[allow(clippy::unnecessary_operation, clippy::identity_op)]
179const _: () = {
180    ["Size of nmod_discrete_log_pohlig_hellman_struct"]
181        [::std::mem::size_of::<nmod_discrete_log_pohlig_hellman_struct>() - 56usize];
182    ["Alignment of nmod_discrete_log_pohlig_hellman_struct"]
183        [::std::mem::align_of::<nmod_discrete_log_pohlig_hellman_struct>() - 8usize];
184    ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::mod_"]
185        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, mod_) - 0usize];
186    ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::alpha"]
187        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, alpha) - 24usize];
188    ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::alphainv"]
189        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, alphainv) - 32usize];
190    ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::num_factors"]
191        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, num_factors) - 40usize];
192    ["Offset of field: nmod_discrete_log_pohlig_hellman_struct::entries"]
193        [::std::mem::offset_of!(nmod_discrete_log_pohlig_hellman_struct, entries) - 48usize];
194};
195impl Default for nmod_discrete_log_pohlig_hellman_struct {
196    fn default() -> Self {
197        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
198        unsafe {
199            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
200            s.assume_init()
201        }
202    }
203}
204pub type nmod_discrete_log_pohlig_hellman_t = [nmod_discrete_log_pohlig_hellman_struct; 1usize];
205pub type __uint128_t = u128;
206extern "C" {
207    #[link_name = "nmod_set_ui__extern"]
208    pub fn nmod_set_ui(x: ulong, mod_: nmod_t) -> ulong;
209    #[link_name = "nmod_set_si__extern"]
210    pub fn nmod_set_si(x: slong, mod_: nmod_t) -> ulong;
211    #[link_name = "_nmod_add__extern"]
212    pub fn _nmod_add(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
213    #[link_name = "_nmod_sub__extern"]
214    pub fn _nmod_sub(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
215    #[link_name = "nmod_add__extern"]
216    pub fn nmod_add(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
217    #[link_name = "nmod_ui_add_ui__extern"]
218    pub fn nmod_ui_add_ui(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
219    #[link_name = "nmod_sub__extern"]
220    pub fn nmod_sub(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
221    #[link_name = "nmod_neg__extern"]
222    pub fn nmod_neg(a: ulong, mod_: nmod_t) -> ulong;
223    #[link_name = "nmod_mul__extern"]
224    pub fn nmod_mul(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
225    #[link_name = "nmod_ui_mul_ui__extern"]
226    pub fn nmod_ui_mul_ui(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
227    #[link_name = "_nmod_mul_fullword__extern"]
228    pub fn _nmod_mul_fullword(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
229    #[link_name = "nmod_addmul__extern"]
230    pub fn nmod_addmul(s: ulong, a: ulong, b: ulong, mod_: nmod_t) -> ulong;
231    #[link_name = "nmod_fmma__extern"]
232    pub fn nmod_fmma(a: ulong, b: ulong, c: ulong, d: ulong, mod_: nmod_t) -> ulong;
233    #[link_name = "nmod_inv__extern"]
234    pub fn nmod_inv(a: ulong, mod_: nmod_t) -> ulong;
235    #[link_name = "nmod_div__extern"]
236    pub fn nmod_div(a: ulong, b: ulong, mod_: nmod_t) -> ulong;
237    pub fn nmod_divides(a: *mut ulong, b: ulong, c: ulong, mod_: nmod_t) -> libc::c_int;
238    pub fn _nmod_pow_ui_redc(a: ulong, exp: ulong, mod_: nmod_t) -> ulong;
239    pub fn _nmod_pow_ui_binexp(a: ulong, exp: ulong, mod_: nmod_t) -> ulong;
240    pub fn nmod_pow_ui(a: ulong, exp: ulong, mod_: nmod_t) -> ulong;
241    #[link_name = "nmod_ui_pow_ui__extern"]
242    pub fn nmod_ui_pow_ui(a: ulong, exp: ulong, mod_: nmod_t) -> ulong;
243    pub fn _nmod_2_pow_ui_binexp(exp: ulong, mod_: nmod_t) -> ulong;
244    pub fn nmod_2_pow_ui(exp: ulong, mod_: nmod_t) -> ulong;
245    #[link_name = "nmod_pow_fmpz__extern"]
246    pub fn nmod_pow_fmpz(a: ulong, exp: *const fmpz, mod_: nmod_t) -> ulong;
247    #[link_name = "nmod_init__extern"]
248    pub fn nmod_init(mod_: *mut nmod_t, n: ulong);
249    #[link_name = "ull_hi__extern"]
250    pub fn ull_hi(x: ull_t) -> ulong;
251    #[link_name = "ull_lo__extern"]
252    pub fn ull_lo(x: ull_t) -> ulong;
253    #[link_name = "ull_add__extern"]
254    pub fn ull_add(x: ull_t, y: ull_t) -> ull_t;
255    #[link_name = "ull_add_u__extern"]
256    pub fn ull_add_u(x: ull_t, y: ulong) -> ull_t;
257    #[link_name = "ull_u_mul_u__extern"]
258    pub fn ull_u_mul_u(x: ulong, y: ulong) -> ull_t;
259    #[link_name = "ull__extern"]
260    pub fn ull(hi: ulong, lo: ulong) -> ull_t;
261    #[link_name = "n_to_redc_preinv__extern"]
262    pub fn n_to_redc_preinv(a: ulong, n: ulong, ninv: ulong, norm: ulong) -> ulong;
263    #[link_name = "n_redc_fast__extern"]
264    pub fn n_redc_fast(x: ulong, n: ulong, nred: ulong) -> ulong;
265    #[link_name = "n_ll_redc_fast__extern"]
266    pub fn n_ll_redc_fast(x: ull_t, n: ulong, nred: ulong) -> ulong;
267    #[link_name = "n_redc__extern"]
268    pub fn n_redc(x: ulong, n: ulong, nred: ulong) -> ulong;
269    #[link_name = "n_ll_redc__extern"]
270    pub fn n_ll_redc(x: ull_t, n: ulong, nred: ulong) -> ulong;
271    #[link_name = "n_mulmod_redc__extern"]
272    pub fn n_mulmod_redc(a: ulong, b: ulong, n: ulong, nred: ulong) -> ulong;
273    #[link_name = "n_mulmod_redc_fast__extern"]
274    pub fn n_mulmod_redc_fast(a: ulong, b: ulong, n: ulong, nred: ulong) -> ulong;
275    #[link_name = "nmod_redc_ctx_init_nmod__extern"]
276    pub fn nmod_redc_ctx_init_nmod(ctx: *mut nmod_redc_ctx_struct, mod_: nmod_t);
277    #[link_name = "nmod_redc_ctx_init_ui__extern"]
278    pub fn nmod_redc_ctx_init_ui(ctx: *mut nmod_redc_ctx_struct, n: ulong);
279    #[link_name = "nmod_redc_set_nmod__extern"]
280    pub fn nmod_redc_set_nmod(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
281    #[link_name = "nmod_redc_set_ui__extern"]
282    pub fn nmod_redc_set_ui(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
283    #[link_name = "nmod_redc_get_nmod__extern"]
284    pub fn nmod_redc_get_nmod(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
285    #[link_name = "nmod_redc_neg__extern"]
286    pub fn nmod_redc_neg(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
287    #[link_name = "nmod_redc_add__extern"]
288    pub fn nmod_redc_add(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
289    #[link_name = "nmod_redc_sub__extern"]
290    pub fn nmod_redc_sub(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
291    #[link_name = "nmod_redc_mul__extern"]
292    pub fn nmod_redc_mul(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
293    #[link_name = "nmod_redc_can_use_fast__extern"]
294    pub fn nmod_redc_can_use_fast(ctx: *const nmod_redc_ctx_struct) -> libc::c_int;
295    #[link_name = "nmod_redc_fast_mul__extern"]
296    pub fn nmod_redc_fast_mul(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
297    #[link_name = "nmod_redc_fast_neg__extern"]
298    pub fn nmod_redc_fast_neg(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
299    #[link_name = "nmod_redc_fast_add__extern"]
300    pub fn nmod_redc_fast_add(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
301    #[link_name = "nmod_redc_fast_sub__extern"]
302    pub fn nmod_redc_fast_sub(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
303    #[link_name = "nmod_redc_fast_normalise__extern"]
304    pub fn nmod_redc_fast_normalise(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
305    #[link_name = "nmod_redc_fast_mul_two__extern"]
306    pub fn nmod_redc_fast_mul_two(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
307    pub fn _nmod_redc_pow_ui(a: ulong, exp: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
308    pub fn _nmod_redc_fast_pow_ui(a: ulong, exp: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
309    pub fn _nmod_redc_2_pow_ui(exp: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
310    pub fn _nmod_redc_fast_2_pow_ui(exp: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
311    #[link_name = "n_to_redc_half_preinv__extern"]
312    pub fn n_to_redc_half_preinv(a: ulong, n: ulong, ninv: ulong, UNUSED_norm: ulong) -> ulong;
313    #[link_name = "n_redc_half_fast__extern"]
314    pub fn n_redc_half_fast(x: ulong, n: ulong, nred: ulong) -> ulong;
315    #[link_name = "n_redc_half__extern"]
316    pub fn n_redc_half(x: ulong, n: ulong, nred: ulong) -> ulong;
317    #[link_name = "n_mulmod_redc_half__extern"]
318    pub fn n_mulmod_redc_half(a: ulong, b: ulong, n: ulong, nred: ulong) -> ulong;
319    #[link_name = "n_mulmod_redc_half_fast__extern"]
320    pub fn n_mulmod_redc_half_fast(a: ulong, b: ulong, n: ulong, nred: ulong) -> ulong;
321    #[link_name = "nmod_redc_half_ctx_init_nmod__extern"]
322    pub fn nmod_redc_half_ctx_init_nmod(ctx: *mut nmod_redc_ctx_struct, mod_: nmod_t);
323    #[link_name = "nmod_redc_half_ctx_init_ui__extern"]
324    pub fn nmod_redc_half_ctx_init_ui(ctx: *mut nmod_redc_ctx_struct, n: ulong);
325    #[link_name = "nmod_redc_half_set_nmod__extern"]
326    pub fn nmod_redc_half_set_nmod(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
327    #[link_name = "nmod_redc_half_set_ui__extern"]
328    pub fn nmod_redc_half_set_ui(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
329    #[link_name = "nmod_redc_half_get_nmod__extern"]
330    pub fn nmod_redc_half_get_nmod(x: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
331    #[link_name = "nmod_redc_half_add__extern"]
332    pub fn nmod_redc_half_add(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
333    #[link_name = "nmod_redc_half_sub__extern"]
334    pub fn nmod_redc_half_sub(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
335    #[link_name = "nmod_redc_half_mul__extern"]
336    pub fn nmod_redc_half_mul(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
337    #[link_name = "nmod_redc_half_can_use_fast__extern"]
338    pub fn nmod_redc_half_can_use_fast(ctx: *const nmod_redc_ctx_struct) -> libc::c_int;
339    #[link_name = "nmod_redc_half_fast_mul__extern"]
340    pub fn nmod_redc_half_fast_mul(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
341    #[link_name = "nmod_redc_half_fast_add__extern"]
342    pub fn nmod_redc_half_fast_add(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
343    #[link_name = "nmod_redc_half_fast_sub__extern"]
344    pub fn nmod_redc_half_fast_sub(x: ulong, y: ulong, ctx: *const nmod_redc_ctx_struct) -> ulong;
345    pub fn gr_ctx_init_nmod_redc(ctx: *mut gr_ctx_struct, n: ulong) -> libc::c_int;
346    pub fn gr_ctx_init_nmod_redc_fast(ctx: *mut gr_ctx_struct, n: ulong) -> libc::c_int;
347    pub fn nmod_discrete_log_pohlig_hellman_init(L: *mut nmod_discrete_log_pohlig_hellman_struct);
348    pub fn nmod_discrete_log_pohlig_hellman_clear(L: *mut nmod_discrete_log_pohlig_hellman_struct);
349    pub fn nmod_discrete_log_pohlig_hellman_precompute_prime(
350        L: *mut nmod_discrete_log_pohlig_hellman_struct,
351        p: ulong,
352    ) -> f64;
353    pub fn nmod_discrete_log_pohlig_hellman_run(
354        L: *const nmod_discrete_log_pohlig_hellman_struct,
355        y: ulong,
356    ) -> ulong;
357    #[link_name = "nmod_discrete_log_pohlig_hellman_primitive_root__extern"]
358    pub fn nmod_discrete_log_pohlig_hellman_primitive_root(
359        L: *const nmod_discrete_log_pohlig_hellman_struct,
360    ) -> ulong;
361}