aboutsummaryrefslogtreecommitdiff
path: root/evc/src/format
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-12-08 09:13:17 +0100
committermetamuffin <metamuffin@disroot.org>2022-12-08 09:13:17 +0100
commit6001cdeff335e12583a398acbb5a8a42c01bc077 (patch)
tree4c1c515cbf33e727f5db317880aadd425a1e0b96 /evc/src/format
parent8b7792d6aa27578221fee7cc8be1ceb202602a5a (diff)
downloadvideo-codec-experiments-6001cdeff335e12583a398acbb5a8a42c01bc077.tar
video-codec-experiments-6001cdeff335e12583a398acbb5a8a42c01bc077.tar.bz2
video-codec-experiments-6001cdeff335e12583a398acbb5a8a42c01bc077.tar.zst
fast mode
Diffstat (limited to 'evc/src/format')
-rw-r--r--evc/src/format/ser.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/evc/src/format/ser.rs b/evc/src/format/ser.rs
index 817cafe..995ca75 100644
--- a/evc/src/format/ser.rs
+++ b/evc/src/format/ser.rs
@@ -103,6 +103,28 @@ impl<T: Ser> Ser for Vec<T> {
}
}
+pub trait ConstSizeSerExt: Sized {
+ fn write_const_size(&self, sink: &mut impl Write, size: usize) -> anyhow::Result<()>;
+ fn read_const_size(source: &mut impl Read, size: usize) -> anyhow::Result<Self>;
+}
+impl<T: Ser> ConstSizeSerExt for Vec<T> {
+ fn write_const_size(&self, sink: &mut impl Write, size: usize) -> anyhow::Result<()> {
+ assert_eq!(self.len(), size);
+ for e in self {
+ e.write(sink).context("some const-size vec")?;
+ }
+ Ok(())
+ }
+
+ fn read_const_size(source: &mut impl Read, size: usize) -> anyhow::Result<Self> {
+ let mut v = vec![];
+ for _ in 0..size {
+ v.push(T::read(source)?)
+ }
+ Ok(v)
+ }
+}
+
impl Ser for u8 {
fn write(&self, sink: &mut impl Write) -> anyhow::Result<()> {
Ok(sink.write_all(&[*self]).context("write u8")?)