1mod distance_field;
2mod fast_sweeping;
3mod obstacles;
4
5use std::path::PathBuf;
6
7pub use crate::distance_field::DistanceField;
8pub use crate::fast_sweeping::NaiveFastSweepingMethod;
9pub use crate::obstacles::Obstacles;
10
11pub trait DistanceFieldAlgorithm {
12 fn calculate_distance_field(&self, distance_field: &mut DistanceField, obstacles: &Obstacles);
13}
14
15pub trait Grid {
16 type Item;
17
18 fn get_at(&self, x: usize, y: usize) -> &Self::Item;
19 fn set_at(&mut self, x: usize, y: usize, value: Self::Item);
20
21 fn get_rows_mut(&mut self, y: usize) -> (&mut [Self::Item], &mut [Self::Item]);
23
24 fn iter(&self) -> std::slice::Iter<'_, Self::Item>;
25 fn iter_mut(&mut self) -> std::slice::IterMut<'_, Self::Item>;
26}
27
28pub trait SavePgm {
29 fn save_pgm(&self, file_name: &PathBuf) -> std::io::Result<()>;
30}
31
32#[inline(always)]
33fn min3(a: f32, b: f32, c: f32) -> f32 {
34 a.min(b).min(c)
35}