mirror of
https://github.com/Magnus167/msyrs.git
synced 2025-08-20 04:20:00 +00:00
add BSeries struct and conversion implementations for FSeries and ISeries
This commit is contained in:
parent
2b969f4eaf
commit
b4d42c1dda
@ -161,3 +161,63 @@ impl_iseries_scalar_op!(Add, add, +);
|
||||
impl_iseries_scalar_op!(Sub, sub, -);
|
||||
impl_iseries_scalar_op!(Mul, mul, *);
|
||||
impl_iseries_scalar_op!(Div, div, /); // floor/trunc division by scalar
|
||||
|
||||
/// A boolean series: BSeries
|
||||
///
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct BSeries {
|
||||
data: Vec<bool>,
|
||||
}
|
||||
|
||||
impl BSeries {
|
||||
pub fn new(data: Vec<bool>) -> Self {
|
||||
Self { data }
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
self.data.len()
|
||||
}
|
||||
|
||||
pub fn data(&self) -> &[bool] {
|
||||
&self.data
|
||||
}
|
||||
}
|
||||
|
||||
/// Convert an FSeries to ISeries by truncation (floor cast).
|
||||
impl From<FSeries> for ISeries {
|
||||
fn from(fseries: FSeries) -> Self {
|
||||
let data = fseries
|
||||
.data
|
||||
.into_iter()
|
||||
.map(|val| val as i64) // trunc cast
|
||||
.collect();
|
||||
ISeries::new(data)
|
||||
}
|
||||
}
|
||||
|
||||
/// Implement conversion from ISeries to FSeries by casting to f64.
|
||||
impl From<ISeries> for FSeries {
|
||||
fn from(iseries: ISeries) -> Self {
|
||||
let data = iseries.data.into_iter().map(|val| val as f64).collect();
|
||||
FSeries::new(data)
|
||||
}
|
||||
}
|
||||
|
||||
/// Convert an ISeries to BSeries by checking if each value is non-zero.
|
||||
impl From<ISeries> for BSeries {
|
||||
fn from(iseries: ISeries) -> Self {
|
||||
let data = iseries.data.into_iter().map(|val| val != 0).collect();
|
||||
BSeries::new(data)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<BSeries> for ISeries {
|
||||
fn from(bseries: BSeries) -> Self {
|
||||
let data = bseries
|
||||
.data
|
||||
.into_iter()
|
||||
.map(|val| if val { 1 } else { 0 })
|
||||
.collect();
|
||||
ISeries::new(data)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user