8000 GitHub - Freyskeyd/stacktools: Offer structure representation of data structures
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Freyskeyd/stacktools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stacktools

Offer structure representation of data structures - This crate helps you to deal with data structures such as Queue (FiFo), Stack (LiFo) and Priority queue.

Build Status Documentation

Install

Just add it to your Cargo.toml:

[dependencies]
stacktools = "0.1"

Examples

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());
}

License

Licensed under either of

at your option.

Contribution

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.

About

Offer structure representation of data structures

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0