quantized_pathfinding/directed/
quantized_astar.rs1use std::hash::Hash;
3use std::fmt::Debug;
4use pathfinding::directed::astar::astar;
5use pathfinding::num_traits::Zero;
6
7use crate::traits::{HasQuantizationMethods, FiniteFloat};
8
9pub fn quantized_astar<T, C, const DIM: usize, Q, FN, IN, FH, FS>(
13 quantizer: &Q,
14 start: [T; DIM],
15 mut successors: FN,
16 mut heuristic: FH,
17 mut success: FS,
18) -> Option<(Vec<[T; DIM]>, C)>
19where
20 T: FiniteFloat,
21 C: Zero + Ord + Copy + Debug,
22 Q: HasQuantizationMethods<T, DIM>,
23 FN: FnMut(&[usize; DIM]) -> IN,
24 IN: IntoIterator<Item = ([usize; DIM], C)>,
25 FH: FnMut(&[usize; DIM]) -> C,
26 FS: FnMut(&[usize; DIM]) -> bool,
27{
28 let start_n = quantizer.quantize(start);
29
30 let result = astar(
31 &start_n,
32 |n| successors(n),
33 |n| heuristic(n),
34 |n| success(n),
35 );
36
37 result.map(|(paths, cost)| {
38 let paths_in_float = paths.into_iter()
39 .map(|quantized| quantizer.dequantize(quantized))
40 .collect();
41 (paths_in_float, cost)
42 })
43}