use super::types::{IsSpaceAvailableFunction, MakeNodeFunction};
use core::hash::Hash;
use std::collections::HashMap;
use std::collections::VecDeque;
pub struct AStar<N: Eq + Hash> {
pub best_node_option: Option<N>,
pub best_total_cost: f64,
pub goal_node_option: Option<N>,
pub list_empty: bool,
pub node_to_node_info_map: HashMap<N, NodeInfo>,
pub node_to_parent_node_map: HashMap<N, N>,
pub open_node_sorted_list: VecDeque<N>,
}
pub struct GradientCartographer<N> {
pub directions: u64,
pub goal_node: N,
pub init_step_size: f64,
pub is_space_available_fn: IsSpaceAvailableFunction<N>,
pub make_node_fn: MakeNodeFunction<N>,
pub start_node: N,
}
pub struct GridCartographer<N> {
pub goal_node: N,
pub is_space_available_fn: IsSpaceAvailableFunction<N>,
pub make_node_fn: MakeNodeFunction<N>,
pub step_size: f64,
}
#[derive(Clone, Copy, Debug, Default)]
pub struct NodeInfo {
pub cost_from_start: f64,
pub total_cost: f64,
}