diff options
author | metamuffin <metamuffin@disroot.org> | 2022-11-21 16:59:50 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-11-21 16:59:50 +0100 |
commit | 5248831232fa22a1f3d6515f7f6c7bee8994faf2 (patch) | |
tree | fdbff884248948d124ab864e21d65fe49c6ca0e2 /dhwt-codec/src/view.rs | |
download | video-codec-experiments-5248831232fa22a1f3d6515f7f6c7bee8994faf2.tar video-codec-experiments-5248831232fa22a1f3d6515f7f6c7bee8994faf2.tar.bz2 video-codec-experiments-5248831232fa22a1f3d6515f7f6c7bee8994faf2.tar.zst |
unify repos
Diffstat (limited to 'dhwt-codec/src/view.rs')
-rw-r--r-- | dhwt-codec/src/view.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/dhwt-codec/src/view.rs b/dhwt-codec/src/view.rs new file mode 100644 index 0000000..0f2ecf7 --- /dev/null +++ b/dhwt-codec/src/view.rs @@ -0,0 +1,42 @@ +use std::ops::{Index, IndexMut}; + +use crate::io::{VideoBuf, Value}; + +#[derive(Copy, Clone, Debug)] +pub enum IndexMode { + XY(usize, usize), + XZ(usize, usize), + YZ(usize, usize), +} + +pub struct BufferView<'a> { + mode: IndexMode, + buf: &'a mut VideoBuf, +} + +impl<'a> BufferView<'a> { + pub fn new(buf: &'a mut VideoBuf, mode: IndexMode) -> Self { + BufferView { mode, buf } + } +} + +impl Index<usize> for BufferView<'_> { + type Output = Value; + + fn index(&self, a: usize) -> &Self::Output { + match self.mode { + IndexMode::XY(x, y) => &self.buf[x][y][a], + IndexMode::XZ(x, z) => &self.buf[x][a][z], + IndexMode::YZ(y, z) => &self.buf[a][y][z], + } + } +} +impl IndexMut<usize> for BufferView<'_> { + fn index_mut(&mut self, a: usize) -> &mut Self::Output { + match self.mode { + IndexMode::XY(x, y) => &mut self.buf[x][y][a], + IndexMode::XZ(x, z) => &mut self.buf[x][a][z], + IndexMode::YZ(y, z) => &mut self.buf[a][y][z], + } + } +} |