rant_simulator/scan/generators/
mod.rs1use super::{ParallelVectorGenerator, VectorGenerator};
2
3pub struct ScanOptions {
4 pub resolutions: Vec<usize>,
5}
6
7pub struct VectorGenerator1D {
8 pub resolution: usize,
9}
10
11impl VectorGenerator for VectorGenerator1D {
12 type Vector = (usize, usize);
13
14 fn generate_scan_vectors(self) -> impl Iterator<Item = Self::Vector> {
15 (0..=self.resolution).map(move |p| (p, self.resolution))
16 }
17
18 fn size_hint(&self) -> usize {
19 self.resolution + 1
20 }
21}
22
23pub struct VectorGenerator2D {
24 pub resolution: (usize, usize),
25}
26
27impl VectorGenerator for VectorGenerator2D {
28 type Vector = [(usize, usize); 2];
29
30 fn generate_scan_vectors(self) -> impl Iterator<Item = Self::Vector> {
31 let (resolution_x, resolution_y) = self.resolution;
32 (0..=resolution_x).flat_map(move |x| {
33 (0..=resolution_y).map(move |y| [(x, resolution_x), (y, resolution_y)])
34 })
35 }
36
37 fn size_hint(&self) -> usize {
38 (self.resolution.0 + 1) * (self.resolution.1 + 1)
39 }
40}
41
42#[derive(Debug, Clone)]
44pub struct ParallelVectorGenerator2D {
45 pub resolution: (usize, usize),
46}
47
48impl ParallelVectorGenerator for ParallelVectorGenerator2D {
49 type Vector = [(usize, usize); 2];
50
51 fn generate_scan_vectors(self) -> impl Iterator<Item = impl Iterator<Item = Self::Vector>> {
52 let (resolution_chunks, resolution_points) = self.resolution;
53 (0..=resolution_chunks).map(move |x| {
54 (0..=resolution_points).map(move |y| [(x, resolution_chunks), (y, resolution_points)])
55 })
56 }
57
58 fn num_chunks(&self) -> usize {
59 self.resolution.0 + 1
60 }
61
62 fn size_hint(&self) -> usize {
63 (self.resolution.0 + 1) * (self.resolution.1 + 1)
64 }
65}