1use crate::deps::*;
4use crate::flint::*;
5
6
7#[repr(C)]
8pub struct qfb {
9 pub a: fmpz_t,
10 pub b: fmpz_t,
11 pub c: fmpz_t,
12}
13#[allow(clippy::unnecessary_operation, clippy::identity_op)]
14const _: () = {
15 ["Size of qfb"][::std::mem::size_of::<qfb>() - 24usize];
16 ["Alignment of qfb"][::std::mem::align_of::<qfb>() - 8usize];
17 ["Offset of field: qfb::a"][::std::mem::offset_of!(qfb, a) - 0usize];
18 ["Offset of field: qfb::b"][::std::mem::offset_of!(qfb, b) - 8usize];
19 ["Offset of field: qfb::c"][::std::mem::offset_of!(qfb, c) - 16usize];
20};
21impl Default for qfb {
22 fn default() -> Self {
23 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
24 unsafe {
25 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
26 s.assume_init()
27 }
28 }
29}
30pub type qfb_t = [qfb; 1usize];
31#[repr(C)]
32pub struct qfb_hash_t {
33 pub q: qfb_t,
34 pub q2: qfb_t,
35 pub iter: slong,
36}
37#[allow(clippy::unnecessary_operation, clippy::identity_op)]
38const _: () = {
39 ["Size of qfb_hash_t"][::std::mem::size_of::<qfb_hash_t>() - 56usize];
40 ["Alignment of qfb_hash_t"][::std::mem::align_of::<qfb_hash_t>() - 8usize];
41 ["Offset of field: qfb_hash_t::q"][::std::mem::offset_of!(qfb_hash_t, q) - 0usize];
42 ["Offset of field: qfb_hash_t::q2"][::std::mem::offset_of!(qfb_hash_t, q2) - 24usize];
43 ["Offset of field: qfb_hash_t::iter"][::std::mem::offset_of!(qfb_hash_t, iter) - 48usize];
44};
45impl Default for qfb_hash_t {
46 fn default() -> Self {
47 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
48 unsafe {
49 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
50 s.assume_init()
51 }
52 }
53}
54extern "C" {
55 #[link_name = "qfb_init__extern"]
56 pub fn qfb_init(q: *mut qfb);
57 #[link_name = "qfb_clear__extern"]
58 pub fn qfb_clear(q: *mut qfb);
59 #[link_name = "qfb_equal__extern"]
60 pub fn qfb_equal(f: *mut qfb, g: *mut qfb) -> libc::c_int;
61 #[link_name = "qfb_set__extern"]
62 pub fn qfb_set(f: *mut qfb, g: *mut qfb);
63 #[link_name = "qfb_discriminant__extern"]
64 pub fn qfb_discriminant(D: *mut fmpz, f: *mut qfb);
65 pub fn qfb_print(q: *mut qfb);
66 #[link_name = "qfb_array_clear__extern"]
67 pub fn qfb_array_clear(forms: *mut *mut qfb, num: slong);
68 pub fn qfb_hash_init(depth: slong) -> *mut qfb_hash_t;
69 pub fn qfb_hash_clear(qhash: *mut qfb_hash_t, depth: slong);
70 pub fn qfb_hash_insert(
71 qhash: *mut qfb_hash_t,
72 q: *mut qfb,
73 q2: *mut qfb,
74 iter: slong,
75 depth: slong,
76 );
77 pub fn qfb_hash_find(qhash: *mut qfb_hash_t, q: *mut qfb, depth: slong) -> slong;
78 pub fn qfb_reduce(r: *mut qfb, f: *mut qfb, D: *mut fmpz);
79 pub fn qfb_is_reduced(r: *mut qfb) -> libc::c_int;
80 pub fn qfb_reduced_forms(forms: *mut *mut qfb, d: slong) -> slong;
81 pub fn qfb_reduced_forms_large(forms: *mut *mut qfb, d: slong) -> slong;
82 pub fn qfb_nucomp(r: *mut qfb, f: *const qfb, g: *const qfb, D: *mut fmpz, L: *mut fmpz);
83 pub fn qfb_nudupl(r: *mut qfb, f: *const qfb, D: *mut fmpz, L: *mut fmpz);
84 pub fn qfb_pow_ui(r: *mut qfb, f: *mut qfb, D: *mut fmpz, exp: ulong);
85 pub fn qfb_pow(r: *mut qfb, f: *mut qfb, D: *mut fmpz, exp: *mut fmpz);
86 pub fn qfb_pow_with_root(r: *mut qfb, f: *mut qfb, D: *mut fmpz, e: *mut fmpz, L: *mut fmpz);
87 #[link_name = "qfb_inverse__extern"]
88 pub fn qfb_inverse(r: *mut qfb, f: *mut qfb);
89 #[link_name = "qfb_is_principal_form__extern"]
90 pub fn qfb_is_principal_form(f: *mut qfb, D: *mut fmpz) -> libc::c_int;
91 #[link_name = "qfb_principal_form__extern"]
92 pub fn qfb_principal_form(f: *mut qfb, D: *mut fmpz);
93 #[link_name = "qfb_is_primitive__extern"]
94 pub fn qfb_is_primitive(f: *mut qfb) -> libc::c_int;
95 pub fn qfb_prime_form(r: *mut qfb, D: *mut fmpz, p: *mut fmpz);
96 pub fn qfb_exponent_element(
97 exponent: *mut fmpz,
98 f: *mut qfb,
99 n: *mut fmpz,
100 B1: ulong,
101 B2_sqrt: ulong,
102 ) -> libc::c_int;
103 pub fn qfb_exponent(
104 exponent: *mut fmpz,
105 n: *mut fmpz,
106 B1: ulong,
107 B2_sqrt: ulong,
108 c: slong,
109 ) -> libc::c_int;
110 pub fn qfb_exponent_grh(
111 exponent: *mut fmpz,
112 n: *mut fmpz,
113 B1: ulong,
114 B2_sqrt: ulong,
115 ) -> libc::c_int;
116}