pub use super::universal::fasc::{
LazyExpr,
LazyMatrixExpr,
DomainMatrix,
gmath,
gmath_parse,
ConstantId,
StackEvaluator,
StackValue,
evaluate,
evaluate_matrix,
evaluate_sincos,
evaluate_sinhcosh,
GmathMode,
ComputeMode,
OutputMode,
};
pub use super::universal::tier_types::{CompactShadow, ShadowConstantId};
pub fn set_gmath_mode(mode_str: &str) -> Result<(), &'static str> {
let mode = GmathMode::from_str(mode_str)?;
super::universal::fasc::mode::set_mode(mode);
Ok(())
}
pub fn reset_gmath_mode() {
super::universal::fasc::mode::reset_mode();
}
#[doc(hidden)]
pub fn __pre_decimal(dp: u8, scaled: i128, shadow_num: i128, shadow_den: u128) -> LazyExpr {
use super::universal::fasc::stack_evaluator::conversion::to_binary_storage;
let storage = to_binary_storage(scaled);
let shadow = CompactShadow::from_rational(shadow_num, shadow_den);
LazyExpr::Value(Box::new(StackValue::Decimal(dp, storage, shadow)))
}
#[doc(hidden)]
pub fn __pre_integer(value: i128) -> LazyExpr {
let shadow = CompactShadow::from_rational(value, 1);
#[cfg(table_format = "q256_256")]
let storage = {
use super::binary_fixed::I512;
I512::from_i128(value) << 256
};
#[cfg(table_format = "q128_128")]
let storage = {
use super::binary_fixed::I256;
I256::from_i128(value) << 128
};
#[cfg(table_format = "q64_64")]
let storage = value << 64;
#[cfg(table_format = "q32_32")]
let storage = (value as i64) << 32;
#[cfg(table_format = "q16_16")]
let storage = {
use super::frac_config;
(value as i32) << frac_config::FRAC_BITS
};
let tier = {
#[cfg(table_format = "q16_16")] { 1u8 }
#[cfg(table_format = "q32_32")] { 2u8 }
#[cfg(table_format = "q64_64")] { 3u8 }
#[cfg(table_format = "q128_128")] { 4u8 }
#[cfg(table_format = "q256_256")] { 5u8 }
};
LazyExpr::Value(Box::new(StackValue::Binary(tier, storage, shadow)))
}