non nan and stuff

main
Zynh0722 2024-04-24 10:00:07 -07:00
parent 3d14f3b3e1
commit 5eeca21c44
2 changed files with 29 additions and 0 deletions

18
src/float_ordering.rs Normal file
View File

@ -0,0 +1,18 @@
use std::cmp::Ordering;
#[derive(Debug, Clone, PartialEq)]
pub struct NonNan(pub f64);
impl Eq for NonNan {}
impl PartialOrd for NonNan {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(other.cmp(self))
}
}
impl Ord for NonNan {
fn cmp(&self, other: &NonNan) -> Ordering {
self.partial_cmp(other).unwrap()
}
}

View File

@ -3,15 +3,18 @@
mod airport; mod airport;
mod cmd; mod cmd;
mod distance; mod distance;
mod float_ordering;
mod parse; mod parse;
use std::{ use std::{
cell::RefCell, cell::RefCell,
collections::{hash_map::Entry, HashMap}, collections::{hash_map::Entry, HashMap},
env, env,
f64::INFINITY,
rc::Rc, rc::Rc,
}; };
use float_ordering::NonNan;
use parse::Record; use parse::Record;
type NodePointer = Rc<RefCell<Node>>; type NodePointer = Rc<RefCell<Node>>;
@ -23,6 +26,8 @@ struct Node {
origin: Rc<airport::Airport>, origin: Rc<airport::Airport>,
destinations: Vec<Destination>, destinations: Vec<Destination>,
visited: bool, visited: bool,
source_distance: NonNan,
previous_node: Option<NodePointer>,
} }
impl Node { impl Node {
@ -31,6 +36,8 @@ impl Node {
destinations, destinations,
origin, origin,
visited: false, visited: false,
source_distance: NonNan(INFINITY),
previous_node: None,
} }
} }
} }
@ -134,5 +141,9 @@ fn main() {
let args: Vec<String> = env::args().collect(); let args: Vec<String> = env::args().collect();
let (origin_id, destination_id) = cmd::handle_args(args, code_to_id); let (origin_id, destination_id) = cmd::handle_args(args, code_to_id);
// Fetch target nodes
let origin = graph[&origin_id].clone();
let destination = graph[&destination_id].clone();
println!("{:#?} {:#?}", graph[&origin_id], graph[&destination_id]); println!("{:#?} {:#?}", graph[&origin_id], graph[&destination_id]);
} }