diff options
author | metamuffin <metamuffin@disroot.org> | 2025-05-05 15:09:54 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-05-05 15:09:54 +0200 |
commit | 306f96164784a8cbf405e72fa4364d6523366e95 (patch) | |
tree | 51717fc139871baa438aad806f4923669ae0896c /old/dhwt-codec/src/view.rs | |
parent | 9cc089e2d6e841879e430b01d2f3d92c8820523e (diff) | |
download | video-codec-experiments-306f96164784a8cbf405e72fa4364d6523366e95.tar video-codec-experiments-306f96164784a8cbf405e72fa4364d6523366e95.tar.bz2 video-codec-experiments-306f96164784a8cbf405e72fa4364d6523366e95.tar.zst |
old dir
Diffstat (limited to 'old/dhwt-codec/src/view.rs')
-rw-r--r-- | old/dhwt-codec/src/view.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/old/dhwt-codec/src/view.rs b/old/dhwt-codec/src/view.rs new file mode 100644 index 0000000..0f2ecf7 --- /dev/null +++ b/old/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], + } + } +} |