Offer structure representation of data structures - This crate helps you to deal with data structures such as Queue (FiFo), Stack (LiFo) and Priority queue.
Just add it to your Cargo.toml
:
[dependencies]
stacktools = "0.1"
extern crate stacktools;
use stacktools::prelude::*;
use stacktools::Queue;
fn main() {
let mut queue: Queue<i32> = Queue::new();
assert!(queue.len() == 0);
queue.push(1);
queue.push(2);
queue.push(3);
assert!(queue.len() == 3);
assert_eq!(Some(1), queue.next());
assert!(queue.len() == 2);
assert_eq!(Some(2), queue.next());
assert!(queue.len() == 1);
assert_eq!(Some(3), queue.next());
assert!(queue.len() == 0);
assert_eq!(None, queue.next());
}
With PriorityQueue:
extern crate stacktools;
use stacktools::prelude::*;
use stacktools::{PriorityQueue, Priority};
use std::cmp::Ordering;
#[derive(Eq, PartialEq, Debug)]
struct PriorityMessage {
priority: Priority,
value: i32,
}
impl Ord for PriorityMessage {
fn cmp(&self, other: &PriorityMessage) -> Ordering {
self.priority.cmp(&other.priority)
}
}
impl PartialOrd for PriorityMessage {
fn partial_cmp(&self, other: &PriorityMessage) -> Option<Ordering> {
Some(self.cmp(other))
}
}
fn main() {
let mut queue: PriorityQueue<PriorityMessage> = PriorityQueue::new();
assert!(queue.len() == 0);
queue.push(PriorityMessage {
priority: Priority::Trivial,
value: 1,
});
queue.push(PriorityMessage {
priority: Priority::Normal,
value: 2,
});
queue.push(PriorityMessage {
priority: Priority::Critical,
value: 3,
});
queue.push(PriorityMessage {
priority: Priority::Critical,
value: 4,
});
assert_eq!(
Some(PriorityMessage {
priority: Priority::Critical,
value: 3,
}),
queue.next()
);
assert!(queue.len() == 3);
assert_eq!(
Some(PriorityMessage {
priority: Priority::Critical,
value: 4,
}),
queue.next()
);
assert!(queue.len() == 2);
assert_eq!(
Some(PriorityMessage {
priority: Priority::Normal,
value: 2,
}),
queue.next()
);
assert!(queue.len() == 1);
assert_eq!(
Some(PriorityMessage {
priority: Priority::Trivial,
value: 1,
}),
queue.next()
);
assert!(queue.len() == 0);
assert_eq!(None, queue.next());
}
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.