use crate::ffi_apis::common::BincodeBuffer;
use crate::ffi_apis::common::from_bincode_buffer;
use crate::ffi_apis::common::to_bincode_buffer;
use crate::symbolic::core::SparsePolynomial;
use crate::symbolic::grobner::MonomialOrder;
use crate::symbolic::grobner::buchberger;
use crate::symbolic::grobner::poly_division_multivariate;
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_buchberger(
basis_buf: BincodeBuffer,
order_buf: BincodeBuffer,
) -> BincodeBuffer {
let basis: Option<Vec<SparsePolynomial>> = from_bincode_buffer(&basis_buf);
let order: Option<MonomialOrder> = from_bincode_buffer(&order_buf);
match (basis, order) {
| (Some(b), Some(o)) => {
match buchberger(&b, o) {
| Ok(result) => to_bincode_buffer(&result),
| Err(_) => BincodeBuffer::empty(),
}
},
| _ => BincodeBuffer::empty(),
}
}
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_poly_division_multivariate(
dividend_buf: BincodeBuffer,
divisors_buf: BincodeBuffer,
order_buf: BincodeBuffer,
) -> BincodeBuffer {
let dividend: Option<SparsePolynomial> = from_bincode_buffer(÷nd_buf);
let divisors: Option<Vec<SparsePolynomial>> = from_bincode_buffer(&divisors_buf);
let order: Option<MonomialOrder> = from_bincode_buffer(&order_buf);
match (dividend, divisors, order) {
| (Some(d), Some(divs), Some(o)) => {
match poly_division_multivariate(&d, &divs, o) {
| Ok(result) => to_bincode_buffer(&result),
| Err(_) => BincodeBuffer::empty(),
}
},
| _ => BincodeBuffer::empty(),
}
}