use crate::{DecContext, DecQuad};
use libc::{c_char, c_int, c_uchar, c_uint};
extern "C" {
pub fn decQuadAbs(dq: *mut DecQuad, dq1: *const DecQuad, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadAdd(dq: *mut DecQuad, dq1: *const DecQuad, dq2: *const DecQuad, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadAnd(dq: *mut DecQuad, dq1: *const DecQuad, dq2: *const DecQuad, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadCanonical(dq: *mut DecQuad, dq1: *const DecQuad) -> *mut DecQuad;
pub fn decQuadCompare(
dq: *mut DecQuad,
dq1: *const DecQuad,
dq2: *const DecQuad,
dc: *mut DecContext,
) -> *mut DecQuad;
pub fn decQuadCompareSignal(
dq: *mut DecQuad,
dq1: *const DecQuad,
dq2: *const DecQuad,
dc: *mut DecContext,
) -> *mut DecQuad;
pub fn decQuadCompareTotal(dq: *mut DecQuad, dq1: *const DecQuad, dq2: *const DecQuad) -> *mut DecQuad;
pub fn decQuadCompareTotalMag(dq: *mut DecQuad, dq1: *const DecQuad, dq2: *const DecQuad) -> *mut DecQuad;
pub fn decQuadCopy(dq: *mut DecQuad, dq1: *const DecQuad) -> *mut DecQuad;
pub fn decQuadCopyAbs(dq: *mut DecQuad, dq1: *const DecQuad) -> *mut DecQuad;
pub fn decQuadCopyNegate(dq: *mut DecQuad, dq1: *const DecQuad) -> *mut DecQuad;
pub fn decQuadCopySign(dq: *mut DecQuad, dq1: *const DecQuad, dq2: *const DecQuad) -> *mut DecQuad;
pub fn decQuadDigits(dq1: *const DecQuad) -> c_uint;
pub fn decQuadDivide(dq: *mut DecQuad, dq1: *const DecQuad, dq2: *const DecQuad, dc: *mut DecContext)
-> *mut DecQuad;
pub fn decQuadDivideInteger(
dq: *mut DecQuad,
dq1: *const DecQuad,
dq2: *const DecQuad,
dc: *mut DecContext,
) -> *mut DecQuad;
pub fn decQuadFMA(
dq: *mut DecQuad,
dq1: *const DecQuad,
dq2: *const DecQuad,
dq3: *const DecQuad,
dc: *mut DecContext,
) -> *mut DecQuad;
pub fn decQuadFromBCD(dq: *mut DecQuad, exp: c_int, bcd: *const c_uchar, sign: c_int) -> *mut DecQuad;
pub fn decQuadFromInt32(dq: *mut DecQuad, n: c_int) -> *mut DecQuad;
pub fn decQuadFromString(dq: *mut DecQuad, s: *const c_char, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadFromUInt32(dq: *mut DecQuad, n: c_uint) -> *mut DecQuad;
pub fn decQuadFromWider(dq: *mut DecQuad, dq1: *const DecQuad, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadGetCoefficient(dq1: *const DecQuad, bcd: *const c_uchar) -> c_int;
pub fn decQuadGetExponent(dq1: *const DecQuad) -> DecQuad;
pub fn decQuadInvert(dq: *mut DecQuad, dq1: *const DecQuad, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadIsCanonical(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsFinite(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsInfinite(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsInteger(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsLogical(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsNaN(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsNegative(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsNormal(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsPositive(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsSignaling(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsSignalling(arg1: *const DecQuad) -> c_uint;
pub fn decQuadIsZero(arg1: *const DecQuad) -> c_uint;
pub fn decQuadMinus(dq: *mut DecQuad, dq1: *const DecQuad, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadMultiply(
dq: *mut DecQuad,
dq1: *const DecQuad,
dq2: *const DecQuad,
dc: *mut DecContext,
) -> *mut DecQuad;
pub fn decQuadPlus(dq: *mut DecQuad, dq1: *const DecQuad, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadQuantize(
dq: *mut DecQuad,
dq1: *const DecQuad,
dq2: *const DecQuad,
dc: *mut DecContext,
) -> *mut DecQuad;
pub fn decQuadReduce(dq: *mut DecQuad, dq1: *const DecQuad, dc: *mut DecContext) -> *mut DecQuad;
pub fn decQuadRemainder(
dq: *mut DecQuad,
dq1: *const DecQuad,
dq2: *const DecQuad,
dc: *mut DecContext,
) -> *mut DecQuad;
pub fn decQuadScaleB(dq: *mut DecQuad, dq1: *const DecQuad, dq2: *const DecQuad, dc: *mut DecContext)
-> *mut DecQuad;
pub fn decQuadSubtract(
dq: *mut DecQuad,
dq1: *const DecQuad,
dq2: *const DecQuad,
dc: *mut DecContext,
) -> *mut DecQuad;
pub fn decQuadToInt32(dq: *const DecQuad, dc: *mut DecContext, rounding: u32) -> c_int;
pub fn decQuadToIntegralValue(
dq: *mut DecQuad,
dq1: *const DecQuad,
dc: *mut DecContext,
rounding: u32,
) -> *mut DecQuad;
pub fn decQuadToString(dq: *const DecQuad, s: *mut c_char) -> *mut c_char;
pub fn decQuadToUInt32(dq: *const DecQuad, dc: *mut DecContext, rounding: u32) -> c_uint;
pub fn decQuadZero(dq: *mut DecQuad);
}