use crate::{RapidRecorder, group::RapidRecorderGroup, named_usize::ValidRapidRecorderNamedUsize};
pub struct RapidRecorderGroupHandle<
'a,
SamplingFrequency: ValidRapidRecorderNamedUsize,
ReadingName: ValidRapidRecorderNamedUsize,
IndexDimmension: ValidRapidRecorderNamedUsize,
> {
group: RapidRecorderGroup<SamplingFrequency, IndexDimmension>,
recorder: &'a RapidRecorder<IndexDimmension, ReadingName>,
sample_rate: usize,
index_value: Option<usize>,
should_save_next: bool,
}
impl<
'a,
SamplingFrequency: ValidRapidRecorderNamedUsize,
ReadingName: ValidRapidRecorderNamedUsize,
IndexDimmension: ValidRapidRecorderNamedUsize,
> RapidRecorderGroupHandle<'a, SamplingFrequency, ReadingName, IndexDimmension>
{
pub fn new(
group: RapidRecorderGroup<SamplingFrequency, IndexDimmension>,
recorder: &'a RapidRecorder<IndexDimmension, ReadingName>,
) -> Self {
let sample_rate = group.sample_rate_value.unwrap();
Self {
group,
recorder,
sample_rate,
index_value: None,
should_save_next: true,
}
}
#[inline(always)]
pub fn add(&self, reading_name: ReadingName, value: f64) {
if self.should_save_next {
self.recorder._add_reading(reading_name.into(), value);
}
}
pub fn start_record(&mut self, unique_id: usize) {
if self.should_save_next {
self._save_record();
}
self.index_value = Some(unique_id);
if self.sample_rate > 1 {
self.should_save_next = self.index_value.unwrap().is_multiple_of(self.sample_rate);
}
}
pub fn _save_record(&self) {
if self.index_value.is_some() {
self.recorder._save_event(
self.group.index_type_value.unwrap(),
self.index_value.unwrap(),
);
}
}
}
impl<
'a,
SamplingFrequency: ValidRapidRecorderNamedUsize,
ReadingName: ValidRapidRecorderNamedUsize,
IndexDimmension: ValidRapidRecorderNamedUsize,
> Drop for RapidRecorderGroupHandle<'a, SamplingFrequency, ReadingName, IndexDimmension>
{
fn drop(&mut self) {
self._save_record();
}
}