nautilus_backtest/ffi/
engine.rsuse std::ops::{Deref, DerefMut};
use nautilus_common::ffi::{clock::TestClock_API, timer::TimeEventHandler};
use nautilus_core::{
ffi::{cvec::CVec, parsing::u8_as_bool},
nanos::UnixNanos,
};
use crate::engine::TimeEventAccumulator;
#[repr(C)]
pub struct TimeEventAccumulatorAPI(Box<TimeEventAccumulator>);
impl Deref for TimeEventAccumulatorAPI {
type Target = TimeEventAccumulator;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for TimeEventAccumulatorAPI {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
#[no_mangle]
pub extern "C" fn time_event_accumulator_new() -> TimeEventAccumulatorAPI {
TimeEventAccumulatorAPI(Box::new(TimeEventAccumulator::new()))
}
#[no_mangle]
pub extern "C" fn time_event_accumulator_drop(accumulator: TimeEventAccumulatorAPI) {
drop(accumulator); }
#[no_mangle]
pub extern "C" fn time_event_accumulator_advance_clock(
accumulator: &mut TimeEventAccumulatorAPI,
clock: &mut TestClock_API,
to_time_ns: UnixNanos,
set_time: u8,
) {
accumulator.advance_clock(clock, to_time_ns, u8_as_bool(set_time));
}
#[no_mangle]
pub extern "C" fn time_event_accumulator_drain(accumulator: &mut TimeEventAccumulatorAPI) -> CVec {
let handlers: Vec<TimeEventHandler> = accumulator.drain().into_iter().map(Into::into).collect();
handlers.into()
}