diff options
author | metamuffin <metamuffin@disroot.org> | 2022-12-08 09:13:17 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-12-08 09:13:17 +0100 |
commit | 6001cdeff335e12583a398acbb5a8a42c01bc077 (patch) | |
tree | 4c1c515cbf33e727f5db317880aadd425a1e0b96 /evc/src/format | |
parent | 8b7792d6aa27578221fee7cc8be1ceb202602a5a (diff) | |
download | video-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.rs | 22 |
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")?) |