use aver_rt::AverInt;
use num_bigint::BigInt;
use super::{Arena, NanValue};
use aver_memory::ArenaIntRef;
pub trait NanIntExt {
#[allow(clippy::wrong_self_convention)]
fn as_aver_int(self, arena: &Arena) -> AverInt;
fn from_aver_int(value: AverInt, arena: &mut Arena) -> NanValue;
}
impl NanIntExt for NanValue {
#[inline]
fn as_aver_int(self, arena: &Arena) -> AverInt {
match self.int_ref(arena) {
ArenaIntRef::Small(n) => AverInt::from_i64(n),
ArenaIntRef::Big(b) => big_to_aver_int(b),
}
}
#[inline]
fn from_aver_int(value: AverInt, arena: &mut Arena) -> NanValue {
match value {
AverInt::Small(n) => NanValue::new_int(n, arena),
AverInt::Big(b) => NanValue::new_big_int(*b, arena),
}
}
}
#[inline]
fn big_to_aver_int(b: &BigInt) -> AverInt {
AverInt::from_bigint(b.clone())
}