1#[derive(Debug, Clone)]
5pub struct Grid2D {
6 pub nx: usize,
7 pub ny: usize,
8 pub dx: f32,
9 pub dy: f32,
10 data: Vec<f32>,
11}
12
13impl Grid2D {
14 pub fn new(nx: usize, ny: usize, dx: f32, dy: f32) -> Self {
15 Self {
16 nx,
17 ny,
18 dx,
19 dy,
20 data: vec![0.0; nx * ny],
21 }
22 }
23
24 #[inline(always)]
25 pub fn index(&self, x: usize, y: usize) -> usize {
26 y * self.nx + x
27 }
28
29 #[inline]
30 pub fn get(&self, x: usize, y: usize) -> f32 {
31 self.data[self.index(x, y)]
32 }
33
34 #[inline]
35 pub fn set(&mut self, x: usize, y: usize, val: f32) {
36 let idx = self.index(x, y);
37 self.data[idx] = val;
38 }
39
40 pub fn fill(&mut self, val: f32) {
41 self.data.fill(val);
42 }
43
44 #[inline]
46 pub fn as_slice(&self) -> &[f32] {
47 &self.data
48 }
49
50 #[inline]
52 pub fn as_mut_slice(&mut self) -> &mut [f32] {
53 &mut self.data
54 }
55
56 #[inline]
58 pub fn row(&self, y: usize) -> &[f32] {
59 &self.data[y * self.nx..(y + 1) * self.nx]
60 }
61}