1#![allow(non_camel_case_types)]
2
3use flint_sys::deps::*;
6use flint_sys::nmod_vec::nmod_t;
7use flint_sys::ulong_extras::n_factor_t;
8use libc::{c_int, c_uint};
9
10pub const DLOG_MODPE: c_uint = 0;
11pub const DLOG_CRT: c_uint = 1;
12pub const DLOG_POWER: c_uint = 2;
13pub const DLOG_BSGS: c_uint = 3;
14pub const DLOG_TABLE: c_uint = 4;
15pub const DLOG_23: c_uint = 5;
16pub type _bindgen_ty_22 = c_uint;
17pub type dlog_precomp_ptr = *mut dlog_precomp_struct;
18
19#[repr(C)]
20#[derive(Debug, Copy, Clone)]
21pub struct dlog_1modpe_struct {
22 pub inv1p: mp_limb_t,
23 pub invloga1: mp_limb_t,
24}
25
26pub type dlog_1modpe_t = [dlog_1modpe_struct; 1usize];
27
28#[repr(C)]
29#[derive(Debug, Copy, Clone)]
30pub struct dlog_modpe_struct {
31 pub p: mp_limb_t,
32 pub e: mp_limb_t,
33 pub pe1: mp_limb_t,
34 pub inva: mp_limb_t,
35 pub pe: nmod_t,
36 pub modp: *mut dlog_precomp_struct,
37 pub modpe: dlog_1modpe_t,
38}
39
40pub type dlog_modpe_t = [dlog_modpe_struct; 1usize];
41
42#[repr(C)]
43#[derive(Debug, Copy, Clone)]
44pub struct dlog_table_struct {
45 pub mod_: mp_limb_t,
46 pub table: *mut mp_limb_t,
47}
48
49pub type dlog_table_t = [dlog_table_struct; 1usize];
50
51#[repr(C)]
52#[derive(Debug, Copy, Clone)]
53pub struct apow {
54 pub k: mp_limb_t,
55 pub ak: mp_limb_t,
56}
57
58pub type apow_t = apow;
59
60#[repr(C)]
61#[derive(Debug, Copy, Clone)]
62pub struct dlog_bsgs_struct {
63 pub mod_: nmod_t,
64 pub m: mp_limb_t,
65 pub am: mp_limb_t,
66 pub g: mp_limb_t,
67 pub table: *mut apow_t,
68}
69
70pub type dlog_bsgs_t = [dlog_bsgs_struct; 1usize];
71#[repr(C)]
72#[derive(Debug, Copy, Clone)]
73pub struct dlog_rho_struct {
74 pub a: mp_limb_t,
75 pub n: nmod_t,
76 pub mod_: nmod_t,
77 pub nisprime: c_int,
78}
79
80pub type dlog_rho_t = [dlog_rho_struct; 1usize];
81
82#[repr(C)]
83#[derive(Debug, Copy, Clone)]
84pub struct dlog_crt_struct {
85 pub mod_: nmod_t,
86 pub n: nmod_t,
87 pub num: mp_limb_t,
88 pub expo: *mut mp_limb_t,
89 pub crt_coeffs: *mut mp_limb_t,
90 pub pre: dlog_precomp_ptr,
91}
92
93pub type dlog_crt_t = [dlog_crt_struct; 1usize];
94
95#[repr(C)]
96#[derive(Debug, Copy, Clone)]
97pub struct dlog_power_struct {
98 pub mod_: nmod_t,
99 pub p: mp_limb_t,
100 pub e: mp_limb_t,
101 pub apk: *mut mp_limb_t,
102 pub pre: *mut dlog_precomp_struct,
103}
104
105pub type dlog_power_t = [dlog_power_struct; 1usize];
106pub type dlog_order23_t = [mp_limb_t; 1usize];
107
108#[repr(C)]
109#[derive(Copy, Clone)]
110pub struct dlog_precomp_struct {
111 pub type_: c_int,
112 pub cost: mp_limb_t,
113 pub t: dlog_precomp_struct__bindgen_ty_1,
114}
115
116#[repr(C)]
117#[derive(Copy, Clone)]
118pub union dlog_precomp_struct__bindgen_ty_1 {
119 pub table: dlog_table_t,
120 pub bsgs: dlog_bsgs_t,
121 pub crt: dlog_crt_t,
122 pub power: dlog_power_t,
123 pub modpe: dlog_modpe_t,
124 pub order23: dlog_order23_t,
125}
126
127pub type dlog_precomp_t = [dlog_precomp_struct; 1usize];
128
129extern "C" {
130 pub fn apow_cmp(x: *const apow_t, y: *const apow_t) -> c_int;
131 pub fn dlog_precomp_modpe_init(
132 pre: *mut dlog_precomp_struct,
133 a: mp_limb_t,
134 p: mp_limb_t,
135 e: mp_limb_t,
136 pe: mp_limb_t,
137 num: mp_limb_t,
138 );
139 pub fn dlog_precomp_small_init(
140 pre: *mut dlog_precomp_struct,
141 a: mp_limb_t,
142 mod_: mp_limb_t,
143 n: mp_limb_t,
144 num: mp_limb_t,
145 );
146 pub fn dlog_precomp_n_init(
147 pre: *mut dlog_precomp_struct,
148 a: mp_limb_t,
149 mod_: mp_limb_t,
150 n: mp_limb_t,
151 num: mp_limb_t,
152 );
153 pub fn dlog_precomp_p_init(
154 pre: *mut dlog_precomp_struct,
155 a: mp_limb_t,
156 mod_: mp_limb_t,
157 p: mp_limb_t,
158 num: mp_limb_t,
159 );
160 pub fn dlog_precomp_pe_init(
161 pre: *mut dlog_precomp_struct,
162 a: mp_limb_t,
163 mod_: mp_limb_t,
164 p: mp_limb_t,
165 e: mp_limb_t,
166 pe: mp_limb_t,
167 num: mp_limb_t,
168 );
169 pub fn dlog_precomp_clear(pre: *mut dlog_precomp_struct);
170 pub fn dlog_precomp(pre: *mut dlog_precomp_struct, b: mp_limb_t) -> mp_limb_t;
171 pub fn dlog_order23_init(t: *mut mp_limb_t, a: mp_limb_t) -> mp_limb_t;
172 pub fn dlog_table_init(t: *mut dlog_table_struct, a: mp_limb_t, mod_: mp_limb_t) -> mp_limb_t;
173 pub fn dlog_crt_init(
174 t: *mut dlog_crt_struct,
175 a: mp_limb_t,
176 mod_: mp_limb_t,
177 n: mp_limb_t,
178 num: mp_limb_t,
179 ) -> mp_limb_t;
180 pub fn dlog_power_init(
181 t: *mut dlog_power_struct,
182 a: mp_limb_t,
183 mod_: mp_limb_t,
184 p: mp_limb_t,
185 e: mp_limb_t,
186 num: mp_limb_t,
187 ) -> mp_limb_t;
188 pub fn dlog_modpe_init(
189 t: *mut dlog_modpe_struct,
190 a: mp_limb_t,
191 p: mp_limb_t,
192 e: mp_limb_t,
193 pe: mp_limb_t,
194 num: mp_limb_t,
195 ) -> mp_limb_t;
196 pub fn dlog_bsgs_init(
197 t: *mut dlog_bsgs_struct,
198 a: mp_limb_t,
199 mod_: mp_limb_t,
200 n: mp_limb_t,
201 m: mp_limb_t,
202 ) -> mp_limb_t;
203 pub fn dlog_1modpe_init(
204 t: *mut dlog_1modpe_struct,
205 a1: mp_limb_t,
206 p: mp_limb_t,
207 e: mp_limb_t,
208 pe: nmod_t,
209 );
210 pub fn dlog_rho_init(t: *mut dlog_rho_struct, a: mp_limb_t, mod_: mp_limb_t, n: mp_limb_t);
211 pub fn dlog_once(b: mp_limb_t, a: mp_limb_t, mod_: nmod_t, n: mp_limb_t) -> mp_limb_t;
212 pub fn dlog_crt_clear(t: *mut dlog_crt_struct);
213 pub fn dlog_order23(t: *mut mp_limb_t, b: mp_limb_t) -> mp_limb_t;
214 pub fn dlog_table(t: *mut dlog_table_struct, b: mp_limb_t) -> mp_limb_t;
215 pub fn dlog_crt(t: *mut dlog_crt_struct, b: mp_limb_t) -> mp_limb_t;
216 pub fn dlog_power(t: *mut dlog_power_struct, b: mp_limb_t) -> mp_limb_t;
217 pub fn dlog_modpe(t: *mut dlog_modpe_struct, b: mp_limb_t) -> mp_limb_t;
218 pub fn dlog_bsgs(t: *mut dlog_bsgs_struct, b: mp_limb_t) -> mp_limb_t;
219 pub fn dlog_rho(t: *mut dlog_rho_struct, b: mp_limb_t) -> mp_limb_t;
220 pub fn dlog_1modpe_1modp(
221 b1: mp_limb_t,
222 p: mp_limb_t,
223 e: mp_limb_t,
224 inv1p: mp_limb_t,
225 pe: nmod_t,
226 ) -> mp_limb_t;
227 pub fn dlog_1modpe(
228 t: *mut dlog_1modpe_struct,
229 b1: mp_limb_t,
230 p: mp_limb_t,
231 e: mp_limb_t,
232 pe: nmod_t,
233 ) -> mp_limb_t;
234 pub fn dlog_mod2e_1mod4(b1: mp_limb_t, e: mp_limb_t, inva: mp_limb_t, pe: nmod_t) -> mp_limb_t;
235 pub fn dlog_mod2e(t: *mut dlog_modpe_struct, b: mp_limb_t) -> mp_limb_t;
236 pub fn dlog_n_factor_group(fac: *mut n_factor_t, bound: mp_limb_t);
237 pub fn dlog_vec_pindex_factorgcd(
238 v: *mut mp_limb_t,
239 nv: mp_limb_t,
240 p: mp_limb_t,
241 mod_: nmod_t,
242 a: mp_limb_t,
243 na: mp_limb_t,
244 loga: mp_limb_t,
245 logm1: mp_limb_t,
246 order: nmod_t,
247 maxtry: c_int,
248 ) -> mp_limb_t;
249 pub fn dlog_vec_fill(v: *mut mp_limb_t, nv: mp_limb_t, x: mp_limb_t);
250 pub fn dlog_vec_set_not_found(v: *mut mp_limb_t, nv: mp_limb_t, mod_: nmod_t);
251 pub fn dlog_vec_loop(
252 v: *mut mp_limb_t,
253 nv: mp_limb_t,
254 a: mp_limb_t,
255 va: mp_limb_t,
256 mod_: nmod_t,
257 na: mp_limb_t,
258 order: nmod_t,
259 );
260 pub fn dlog_vec_loop_add(
261 v: *mut mp_limb_t,
262 nv: mp_limb_t,
263 a: mp_limb_t,
264 va: mp_limb_t,
265 mod_: nmod_t,
266 na: mp_limb_t,
267 order: nmod_t,
268 );
269 pub fn dlog_vec_eratos_add(
270 v: *mut mp_limb_t,
271 nv: mp_limb_t,
272 a: mp_limb_t,
273 va: mp_limb_t,
274 mod_: nmod_t,
275 na: mp_limb_t,
276 order: nmod_t,
277 );
278 pub fn dlog_vec_eratos(
279 v: *mut mp_limb_t,
280 nv: mp_limb_t,
281 a: mp_limb_t,
282 va: mp_limb_t,
283 mod_: nmod_t,
284 na: mp_limb_t,
285 order: nmod_t,
286 );
287 pub fn dlog_vec_sieve_add(
288 v: *mut mp_limb_t,
289 nv: mp_limb_t,
290 a: mp_limb_t,
291 va: mp_limb_t,
292 mod_: nmod_t,
293 na: mp_limb_t,
294 order: nmod_t,
295 );
296 pub fn dlog_vec_sieve(
297 v: *mut mp_limb_t,
298 nv: mp_limb_t,
299 a: mp_limb_t,
300 va: mp_limb_t,
301 mod_: nmod_t,
302 na: mp_limb_t,
303 order: nmod_t,
304 );
305 pub fn dlog_vec_add(
306 v: *mut mp_limb_t,
307 nv: mp_limb_t,
308 a: mp_limb_t,
309 va: mp_limb_t,
310 mod_: nmod_t,
311 na: mp_limb_t,
312 order: nmod_t,
313 );
314 pub fn dlog_vec(
315 v: *mut mp_limb_t,
316 nv: mp_limb_t,
317 a: mp_limb_t,
318 va: mp_limb_t,
319 mod_: nmod_t,
320 na: mp_limb_t,
321 order: nmod_t,
322 );
323 pub fn dlog_vec_sieve_precomp(
324 v: *mut mp_limb_t,
325 nv: mp_limb_t,
326 pre: *mut dlog_precomp_struct,
327 a: mp_limb_t,
328 va: mp_limb_t,
329 mod_: nmod_t,
330 na: mp_limb_t,
331 order: nmod_t,
332 );
333 pub fn dlog_vec_sieve_add_precomp(
334 v: *mut mp_limb_t,
335 nv: mp_limb_t,
336 pre: *mut dlog_precomp_struct,
337 a: mp_limb_t,
338 va: mp_limb_t,
339 mod_: nmod_t,
340 na: mp_limb_t,
341 order: nmod_t,
342 );
343 pub fn dlog_vec_add_precomp(
344 v: *mut mp_limb_t,
345 nv: mp_limb_t,
346 pre: *mut dlog_precomp_struct,
347 a: mp_limb_t,
348 va: mp_limb_t,
349 mod_: nmod_t,
350 na: mp_limb_t,
351 order: nmod_t,
352 );
353}