From 3c68a804a9ad057b1220320906ef54f8833dc0bc Mon Sep 17 00:00:00 2001 From: Dominik Werder Date: Mon, 25 Nov 2024 10:20:32 +0100 Subject: [PATCH] Add method to dyn merge --- src/events.rs | 5 +++-- src/merge.rs | 9 +++++++++ src/timebin.rs | 8 +++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/events.rs b/src/events.rs index 1cef23a..01a11ff 100644 --- a/src/events.rs +++ b/src/events.rs @@ -4,6 +4,7 @@ use crate::collect_s::CollectableDyn; use crate::container::ByteEstimate; use crate::timebin::BinningggContainerEventsDyn; use daqbuf_err as err; +use netpod::TsNano; use std::any::Any; use std::collections::VecDeque; use std::fmt; @@ -35,8 +36,8 @@ pub trait Resettable { fn reset(&mut self); } -pub trait Appendable: Empty + WithLen { - fn push(&mut self, ts: u64, pulse: u64, value: STY); +pub trait Appendable: WithLen { + fn push(&mut self, ts: TsNano, value: STY); } pub trait Extendable: Empty + WithLen { diff --git a/src/merge.rs b/src/merge.rs index bf7190e..c45b952 100644 --- a/src/merge.rs +++ b/src/merge.rs @@ -1,4 +1,5 @@ use crate::container::ByteEstimate; +use crate::timebin::BinningggContainerEventsDyn; use crate::AsAnyMut; use crate::WithLen; use core::ops::Range; @@ -30,6 +31,13 @@ pub enum DrainIntoNewResult { NotCompatible, } +#[derive(Debug)] +pub enum DrainIntoNewDynResult { + Done(Box), + Partial(Box), + NotCompatible, +} + pub trait MergeableTy: fmt::Debug + WithLen + ByteEstimate + Unpin + Sized { fn ts_min(&self) -> Option; fn ts_max(&self) -> Option; @@ -50,4 +58,5 @@ pub trait MergeableDyn: fmt::Debug + WithLen + ByteEstimate + Unpin + AsAnyMut { fn tss_for_testing(&self) -> Vec; fn drain_into(&mut self, dst: &mut dyn MergeableDyn, range: Range) -> DrainIntoDstResult; + fn drain_into_new(&mut self, range: Range) -> DrainIntoNewDynResult; } diff --git a/src/timebin.rs b/src/timebin.rs index 83d5b01..8be97c5 100644 --- a/src/timebin.rs +++ b/src/timebin.rs @@ -1,6 +1,7 @@ use crate::collect_s::CollectableDyn; use crate::container::ByteEstimate; use crate::merge::DrainIntoDstResult; +use crate::merge::DrainIntoNewDynResult; use crate::merge::MergeableDyn; use crate::AsAnyMut; use crate::AsAnyRef; @@ -97,6 +98,7 @@ pub trait BinningggContainerEventsDyn: fn serde_id(&self) -> u32; fn nty_id(&self) -> u32; fn eq(&self, rhs: &dyn BinningggContainerEventsDyn) -> bool; + fn verify(&self) -> bool; } impl MergeableDyn for Box @@ -132,7 +134,11 @@ where dst: &mut dyn MergeableDyn, range: Range, ) -> DrainIntoDstResult { - todo!() + self.as_mut().drain_into(dst, range) + } + + fn drain_into_new(&mut self, range: Range) -> DrainIntoNewDynResult { + self.as_mut().drain_into_new(range) } }