From 9a7a9b7cfcda2f99cba3b0c6e49ec556d155dba7 Mon Sep 17 00:00:00 2001 From: Dominik Werder Date: Thu, 20 Feb 2025 10:16:23 +0100 Subject: [PATCH] Add truncate_front for containers --- src/binning/container_events.rs | 31 +++++++++++++++++++++++++++++++ src/binning/valuetype.rs | 8 ++++++++ 2 files changed, 39 insertions(+) diff --git a/src/binning/container_events.rs b/src/binning/container_events.rs index ad30dd3..5228458 100644 --- a/src/binning/container_events.rs +++ b/src/binning/container_events.rs @@ -67,6 +67,7 @@ where fn get_iter_ty_1(&self, pos: usize) -> Option>; fn iter_ty_1(&self) -> impl Iterator>; fn drain_into(&mut self, dst: &mut Self, range: Range); + fn truncate_front(&mut self, len: usize); fn into_user_facing_fields(self) -> Vec<(String, Box)>; fn into_user_facing_fields_json(self) -> Vec<(String, Box)>; } @@ -119,6 +120,13 @@ where dst.extend(self.drain(range)); } + fn truncate_front(&mut self, len: usize) { + if self.len() > len { + let n = self.len() - len; + self.drain(0..n); + } + } + fn into_user_facing_fields(self) -> Vec<(String, Box)> { vec![("values".into(), Box::new(self))] } @@ -157,6 +165,13 @@ impl Container for VecDeque { dst.extend(self.drain(range)) } + fn truncate_front(&mut self, len: usize) { + if self.len() > len { + let n = self.len() - len; + self.drain(0..n); + } + } + fn into_user_facing_fields(self) -> Vec<(String, Box)> { vec![("values".into(), Box::new(self))] } @@ -548,6 +563,14 @@ where self.vals.drain_into(&mut dst.vals, range.clone()); } + fn truncate_front(&mut self, len: usize) { + if self.len() > len { + let n = self.len() - len; + self.pulses.drain(0..n); + self.vals.truncate_front(len); + } + } + fn into_user_facing_fields(self) -> Vec<(String, Box)> { vec![ ("pulses".into(), Box::new(self.pulses)), @@ -814,6 +837,14 @@ where self.vals.clear(); self.byte_estimate = 0; } + + pub fn truncate_front(&mut self, len: usize) { + if self.len() > len { + let n = self.len() - len; + self.tss.drain(0..n); + self.vals.truncate_front(len); + } + } } impl fmt::Debug for ContainerEvents diff --git a/src/binning/valuetype.rs b/src/binning/valuetype.rs index d210929..706b26d 100644 --- a/src/binning/valuetype.rs +++ b/src/binning/valuetype.rs @@ -81,6 +81,14 @@ impl Container for EnumVariantContainer { dst.names.extend(self.names.drain(range)); } + fn truncate_front(&mut self, len: usize) { + if self.len() > len { + let n = self.len() - len; + self.ixs.drain(0..n); + self.names.drain(0..n); + } + } + fn into_user_facing_fields(self) -> Vec<(String, Box)> { vec![ ("values".into(), Box::new(self.ixs)),