Add truncate_front for containers

This commit is contained in:
Dominik Werder
2025-02-20 10:16:23 +01:00
parent 0910443255
commit 9a7a9b7cfc
2 changed files with 39 additions and 0 deletions

View File

@@ -67,6 +67,7 @@ where
fn get_iter_ty_1(&self, pos: usize) -> Option<EVT::IterTy1<'_>>;
fn iter_ty_1(&self) -> impl Iterator<Item = EVT::IterTy1<'_>>;
fn drain_into(&mut self, dst: &mut Self, range: Range<usize>);
fn truncate_front(&mut self, len: usize);
fn into_user_facing_fields(self) -> Vec<(String, Box<dyn erased_serde::Serialize>)>;
fn into_user_facing_fields_json(self) -> Vec<(String, Box<dyn erased_serde::Serialize>)>;
}
@@ -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<dyn erased_serde::Serialize>)> {
vec![("values".into(), Box::new(self))]
}
@@ -157,6 +165,13 @@ impl Container<String> for VecDeque<String> {
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<dyn erased_serde::Serialize>)> {
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<dyn erased_serde::Serialize>)> {
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<EVT> fmt::Debug for ContainerEvents<EVT>

View File

@@ -81,6 +81,14 @@ impl Container<EnumVariant> 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<dyn erased_serde::Serialize>)> {
vec![
("values".into(), Box::new(self.ixs)),