use crate::dimensions::numeral::NumeralData;
use crate::types::TokenData;
pub fn numeral_data(token: &TokenData) -> Option<&NumeralData> {
match token {
TokenData::Numeral(data) => Some(data),
_ => None,
}
}
pub fn is_positive(token: &TokenData) -> bool {
match token {
TokenData::Numeral(data) => data.value >= 0.0,
_ => false,
}
}
pub fn is_natural(token: &TokenData) -> bool {
match token {
TokenData::Numeral(data) => data.value > 0.0 && data.value == data.value.floor(),
_ => false,
}
}
pub fn is_multipliable(token: &TokenData) -> bool {
match token {
TokenData::Numeral(data) => data.multipliable,
_ => false,
}
}
pub fn decimals_to_double(x: f64) -> f64 {
let mut multiplier = 1.0;
for _ in 0..10 {
if x < multiplier {
return x / multiplier;
}
multiplier *= 10.0;
}
0.0
}
pub fn integer_value(token: &TokenData) -> Option<i64> {
match token {
TokenData::Numeral(data) => {
if data.value == data.value.floor() {
Some(data.value as i64)
} else {
None
}
}
_ => None,
}
}