use crate::dec_context_c::*;
use std::ffi::CStr;
pub const DEC_INIT_BASE: i32 = 0;
pub const DEC_INIT_DECIMAL32: i32 = 32;
pub const DEC_INIT_DECIMAL64: i32 = 64;
pub const DEC_INIT_DECIMAL128: i32 = 128;
#[repr(C)]
#[derive(Default, Debug, Copy, Clone)]
pub struct DecContext {
pub digits: i32,
pub emax: i32,
pub emin: i32,
pub round: u32,
pub traps: u32,
pub status: u32,
pub clamp: u8,
}
pub fn dec_context_base(digits: i32) -> DecContext {
let mut context = DecContext::default();
unsafe {
decContextDefault(&mut context, DEC_INIT_BASE);
context.digits = digits;
context.traps = 0;
}
context
}
pub fn dec_context_32() -> DecContext {
let mut context = DecContext::default();
unsafe {
decContextDefault(&mut context, DEC_INIT_DECIMAL32);
context.traps = 0;
}
context
}
pub fn dec_context_64() -> DecContext {
let mut context = DecContext::default();
unsafe {
decContextDefault(&mut context, DEC_INIT_DECIMAL64);
context.traps = 0;
}
context
}
pub fn dec_context_128() -> DecContext {
let mut context = DecContext::default();
unsafe {
decContextDefault(&mut context, DEC_INIT_DECIMAL128);
context.traps = 0;
}
context
}
pub fn dec_context_default(kind: i32) -> DecContext {
unsafe {
let mut context = DecContext::default();
decContextDefault(&mut context, kind);
context.traps = 0;
context
}
}
pub fn dec_context_get_status(dc: &mut DecContext) -> u32 {
unsafe { decContextGetStatus(dc) }
}
pub fn dec_context_status_to_string(dc: &mut DecContext) -> String {
unsafe {
let s = decContextStatusToString(dc);
CStr::from_ptr(s).to_string_lossy().into_owned()
}
}
pub fn dec_context_zero_status(dc: &mut DecContext) {
unsafe {
decContextZeroStatus(dc);
}
}