dspk_core/buffer/
layout.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5pub enum MemoryOrder {
6 ChannelMajor,
9
10 TimeMajor,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
17pub struct BufferLayout {
18 pub channels: usize,
19 pub samples: usize,
20 pub order: MemoryOrder,
21}
22
23impl BufferLayout {
24 pub fn new(channels: usize, samples: usize, order: MemoryOrder) -> Self {
25 Self {
26 channels,
27 samples,
28 order,
29 }
30 }
31
32 pub fn total_elements(&self) -> usize {
33 self.channels * self.samples
34 }
35
36 #[inline(always)]
38 pub fn linear_index(&self, channel: usize, sample: usize) -> usize {
39 match self.order {
40 MemoryOrder::ChannelMajor => channel * self.samples + sample,
41 MemoryOrder::TimeMajor => sample * self.channels + channel,
42 }
43 }
44}