use crate::{
aggregation::TradeTradeTimestamp,
instrument::{InstrumentData, InstrumentSpec},
timestamp::TradeTimestamped,
};
pub struct StdTrades<'instrument_data, IS: InstrumentSpec> {
data: &'instrument_data [TradeTradeTimestamp<IS>],
}
impl<'instrument_data, IS: InstrumentSpec> StdTrades<'instrument_data, IS> {
pub fn new(data: &'instrument_data [TradeTradeTimestamp<IS>]) -> Self {
Self { data }
}
pub fn new_reaggregate<T: TradeTimestamped + 'instrument_data>(
instrument_data: &'instrument_data InstrumentData<'instrument_data, '_, IS>,
recent_aggregated_data_backward: impl Iterator<Item = &'instrument_data T>,
count: usize,
) -> Self {
debug_assert!(count >= 1);
let Some(aggregation) = recent_aggregated_data_backward
.skip(count - 1)
.next()
else {
return Self {
data: instrument_data.trades_forward_slice(),
};
};
Self {
data: instrument_data.reaggregate_trade_forward_slice(aggregation),
}
}
pub fn new_aggregate<T: TradeTimestamped + 'instrument_data>(
instrument_data: &'instrument_data InstrumentData<'instrument_data, '_, IS>
) -> Self {
Self {
data: instrument_data.trades_new_recent_forward_slice(),
}
}
pub fn into_iter(self) -> impl IntoIterator<Item = &'instrument_data TradeTradeTimestamp<IS>> {
self.data
}
pub fn iter(&self) -> impl Iterator<Item = &'instrument_data TradeTradeTimestamp<IS>> {
self.data.iter()
}
}