aboutsummaryrefslogtreecommitdiff
path: root/old/dhwt-codec/src/view.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-05-05 15:09:54 +0200
committermetamuffin <metamuffin@disroot.org>2025-05-05 15:09:54 +0200
commit306f96164784a8cbf405e72fa4364d6523366e95 (patch)
tree51717fc139871baa438aad806f4923669ae0896c /old/dhwt-codec/src/view.rs
parent9cc089e2d6e841879e430b01d2f3d92c8820523e (diff)
downloadvideo-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.rs42
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],
+ }
+ }
+}