use crate::deps::*;
use crate::flint::*;
#[repr(C)]
pub struct qfb {
pub a: fmpz_t,
pub b: fmpz_t,
pub c: fmpz_t,
}
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
const _: () = {
["Size of qfb"][::std::mem::size_of::<qfb>() - 24usize];
["Alignment of qfb"][::std::mem::align_of::<qfb>() - 8usize];
["Offset of field: qfb::a"][::std::mem::offset_of!(qfb, a) - 0usize];
["Offset of field: qfb::b"][::std::mem::offset_of!(qfb, b) - 8usize];
["Offset of field: qfb::c"][::std::mem::offset_of!(qfb, c) - 16usize];
};
impl Default for qfb {
fn default() -> Self {
let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
unsafe {
::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
s.assume_init()
}
}
}
pub type qfb_t = [qfb; 1usize];
#[repr(C)]
pub struct qfb_hash_t {
pub q: qfb_t,
pub q2: qfb_t,
pub iter: slong,
}
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
const _: () = {
["Size of qfb_hash_t"][::std::mem::size_of::<qfb_hash_t>() - 56usize];
["Alignment of qfb_hash_t"][::std::mem::align_of::<qfb_hash_t>() - 8usize];
["Offset of field: qfb_hash_t::q"][::std::mem::offset_of!(qfb_hash_t, q) - 0usize];
["Offset of field: qfb_hash_t::q2"][::std::mem::offset_of!(qfb_hash_t, q2) - 24usize];
["Offset of field: qfb_hash_t::iter"][::std::mem::offset_of!(qfb_hash_t, iter) - 48usize];
};
impl Default for qfb_hash_t {
fn default() -> Self {
let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
unsafe {
::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
s.assume_init()
}
}
}
extern "C" {
#[link_name = "qfb_init__extern"]
pub fn qfb_init(q: *mut qfb);
#[link_name = "qfb_clear__extern"]
pub fn qfb_clear(q: *mut qfb);
#[link_name = "qfb_equal__extern"]
pub fn qfb_equal(f: *mut qfb, g: *mut qfb) -> libc::c_int;
#[link_name = "qfb_set__extern"]
pub fn qfb_set(f: *mut qfb, g: *mut qfb);
#[link_name = "qfb_discriminant__extern"]
pub fn qfb_discriminant(D: *mut fmpz, f: *mut qfb);
pub fn qfb_print(q: *mut qfb);
#[link_name = "qfb_array_clear__extern"]
pub fn qfb_array_clear(forms: *mut *mut qfb, num: slong);
pub fn qfb_hash_init(depth: slong) -> *mut qfb_hash_t;
pub fn qfb_hash_clear(qhash: *mut qfb_hash_t, depth: slong);
pub fn qfb_hash_insert(
qhash: *mut qfb_hash_t,
q: *mut qfb,
q2: *mut qfb,
iter: slong,
depth: slong,
);
pub fn qfb_hash_find(qhash: *mut qfb_hash_t, q: *mut qfb, depth: slong) -> slong;
pub fn qfb_reduce(r: *mut qfb, f: *mut qfb, D: *mut fmpz);
pub fn qfb_is_reduced(r: *mut qfb) -> libc::c_int;
pub fn qfb_reduced_forms(forms: *mut *mut qfb, d: slong) -> slong;
pub fn qfb_reduced_forms_large(forms: *mut *mut qfb, d: slong) -> slong;
pub fn qfb_nucomp(r: *mut qfb, f: *const qfb, g: *const qfb, D: *mut fmpz, L: *mut fmpz);
pub fn qfb_nudupl(r: *mut qfb, f: *const qfb, D: *mut fmpz, L: *mut fmpz);
pub fn qfb_pow_ui(r: *mut qfb, f: *mut qfb, D: *mut fmpz, exp: ulong);
pub fn qfb_pow(r: *mut qfb, f: *mut qfb, D: *mut fmpz, exp: *mut fmpz);
pub fn qfb_pow_with_root(r: *mut qfb, f: *mut qfb, D: *mut fmpz, e: *mut fmpz, L: *mut fmpz);
#[link_name = "qfb_inverse__extern"]
pub fn qfb_inverse(r: *mut qfb, f: *mut qfb);
#[link_name = "qfb_is_principal_form__extern"]
pub fn qfb_is_principal_form(f: *mut qfb, D: *mut fmpz) -> libc::c_int;
#[link_name = "qfb_principal_form__extern"]
pub fn qfb_principal_form(f: *mut qfb, D: *mut fmpz);
#[link_name = "qfb_is_primitive__extern"]
pub fn qfb_is_primitive(f: *mut qfb) -> libc::c_int;
pub fn qfb_prime_form(r: *mut qfb, D: *mut fmpz, p: *mut fmpz);
pub fn qfb_exponent_element(
exponent: *mut fmpz,
f: *mut qfb,
n: *mut fmpz,
B1: ulong,
B2_sqrt: ulong,
) -> libc::c_int;
pub fn qfb_exponent(
exponent: *mut fmpz,
n: *mut fmpz,
B1: ulong,
B2_sqrt: ulong,
c: slong,
) -> libc::c_int;
pub fn qfb_exponent_grh(
exponent: *mut fmpz,
n: *mut fmpz,
B1: ulong,
B2_sqrt: ulong,
) -> libc::c_int;
}