Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 19 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,27 @@
name = "platform-trees"
version = "0.1.0-beta.1"
edition = "2018"
authors = ["uselesssgoddess", "Linksplatform Team <linksplatformtechnologies@gmail.com>"]
license = "LGPL-3.0"
authors = [
"uselesssgoddess",
"Linksplatform Team <linksplatformtechnologies@gmail.com>"
]
license = "Unlicense"
repository = "https://github.com/linksplatform/Collections.Methods"
homepage = "https://github.com/linksplatform/Collections.Methods/rust"
description = """
Trees methods for linksplatform
"""

[dependencies]
tap = "1.0.1"
funty = "2.0"
platform-data = { version = "0.1.0-beta.3", path = "../data-rs" }

[dependencies.platform-data]
version = "0.1.0-beta.3"
git = "https://github.com/linksplatform/core-rs"
branch = "feature/f-oriented"

[dev-dependencies]
criterion = "0.4.0"
proptest = "1.0.0"

[[bench]]
name = "bench"
harness = false
11 changes: 11 additions & 0 deletions benches/bench.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use {
criterion::{criterion_group, criterion_main, Criterion, Throughput},
};

pub fn bench(c: &mut Criterion) {
const MAGIC: usize = 1_000_000;

}

criterion_group!(benches, bench);
criterion_main!(benches);
6 changes: 6 additions & 0 deletions rustfmt.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
error_on_line_overflow = true
error_on_unformatted = true
version = "Two"

imports_granularity = "One"
use_small_heuristics = "Max"
34 changes: 30 additions & 4 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,37 @@
#![feature(default_free_fn)]
#![feature(let_else)]

// fixme: #![no_std]
#![deny(unused_must_use)]

mod lists;
mod trees;

pub use lists::{
AbsoluteCircularLinkedList, AbsoluteLinkedList, LinkedList, RelativeCircularLinkedList,
RelativeLinkedList,
pub use {
lists::{
AbsoluteCircularLinkedList, AbsoluteLinkedList, LinkedList, RelativeCircularLinkedList,
RelativeLinkedList,
},
trees::{new_v2, NoRecurSzbTree, SzbTree},
};

pub use trees::{NoRecurSzbTree, SzbTree};
macro_rules! named {
($($name:ident => $val:expr)*) => {
$(
fn $name() -> Self {
Self::from_addr($val)
}
)*
};
}

// bridge to old api
pub trait LinkType: platform_data::LinkType + funty::Unsigned {
named! {
zero => 0
one => 1
two => 2
}
}

impl<All> LinkType for All where All: platform_data::LinkType + funty::Unsigned {}
15 changes: 7 additions & 8 deletions src/lists/absolute_circular_linked_list.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::AbsoluteLinkedList;
use platform_data::LinkType;
use crate::{AbsoluteLinkedList, LinkType};

pub trait AbsoluteCircularLinkedList<T: LinkType>: AbsoluteLinkedList<T> {
fn attach_before(&mut self, base_element: T, new_element: T) {
Expand Down Expand Up @@ -28,7 +27,7 @@ pub trait AbsoluteCircularLinkedList<T: LinkType>: AbsoluteLinkedList<T> {

fn attach_as_first(&mut self, element: T) {
let first = self.get_first();
if first == T::funty(0) {
if first == T::zero() {
self.set_first(element);
self.set_last(element);
self.set_previous(element, element);
Expand All @@ -41,7 +40,7 @@ pub trait AbsoluteCircularLinkedList<T: LinkType>: AbsoluteLinkedList<T> {

fn attach_as_last(&mut self, element: T) {
let last = self.get_last();
if last == T::funty(0) {
if last == T::zero() {
self.attach_as_first(element);
} else {
self.attach_after(last, element);
Expand All @@ -52,8 +51,8 @@ pub trait AbsoluteCircularLinkedList<T: LinkType>: AbsoluteLinkedList<T> {
let element_previous = self.get_previous(element);
let element_next = self.get_next(element);
if element_next == element {
self.set_first(T::funty(0));
self.set_last(T::funty(0));
self.set_first(T::zero());
self.set_last(T::zero());
} else {
self.set_next(element_previous, element_next);
self.set_previous(element_next, element_previous);
Expand All @@ -64,8 +63,8 @@ pub trait AbsoluteCircularLinkedList<T: LinkType>: AbsoluteLinkedList<T> {
self.set_last(element_previous);
}
}
self.set_previous(element, T::funty(0));
self.set_next(element, T::funty(0));
self.set_previous(element, T::zero());
self.set_next(element, T::zero());
self.dec_size();
}
}
7 changes: 3 additions & 4 deletions src/lists/absolute_linked_list.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::LinkedList;
use platform_data::LinkType;
use crate::{LinkType, LinkedList};

pub trait AbsoluteLinkedList<T: LinkType>: LinkedList<T> {
fn get_first(&self) -> T;
Expand All @@ -11,9 +10,9 @@ pub trait AbsoluteLinkedList<T: LinkType>: LinkedList<T> {
fn set_size(&mut self, size: T);

fn inc_size(&mut self) {
self.set_size(self.get_size() + T::funty(1))
self.set_size(self.get_size() + T::one())
}
fn dec_size(&mut self) {
self.set_size(self.get_size() - T::funty(1))
self.set_size(self.get_size() - T::one())
}
}
2 changes: 1 addition & 1 deletion src/lists/linked_list.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use platform_data::LinkType;
use crate::LinkType;

pub trait LinkedList<T: LinkType> {
fn get_previous(&self, element: T) -> T;
Expand Down
15 changes: 7 additions & 8 deletions src/lists/relative_circular_linked_list.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::RelativeLinkedList;
use platform_data::LinkType;
use crate::{LinkType, RelativeLinkedList};

pub trait RelativeCircularLinkedList<T: LinkType>: RelativeLinkedList<T> {
fn attach_before(&mut self, head: T, base_element: T, new_element: T) {
Expand Down Expand Up @@ -28,7 +27,7 @@ pub trait RelativeCircularLinkedList<T: LinkType>: RelativeLinkedList<T> {

fn attach_as_first(&mut self, head: T, element: T) {
let first = self.get_first(head);
if first == T::funty(0) {
if first == T::zero() {
self.set_first(head, element);
self.set_last(head, element);
self.set_previous(element, element);
Expand All @@ -41,7 +40,7 @@ pub trait RelativeCircularLinkedList<T: LinkType>: RelativeLinkedList<T> {

fn attach_as_last(&mut self, head: T, element: T) {
let last = self.get_last(head);
if last == T::funty(0) {
if last == T::zero() {
self.attach_as_first(head, element);
} else {
self.attach_after(head, last, element);
Expand All @@ -52,8 +51,8 @@ pub trait RelativeCircularLinkedList<T: LinkType>: RelativeLinkedList<T> {
let element_previous = self.get_previous(element);
let element_next = self.get_next(element);
if element_next == element {
self.set_first(head, T::funty(0));
self.set_last(head, T::funty(0));
self.set_first(head, T::zero());
self.set_last(head, T::zero());
} else {
self.set_next(element_previous, element_next);
self.set_previous(element_next, element_previous);
Expand All @@ -64,8 +63,8 @@ pub trait RelativeCircularLinkedList<T: LinkType>: RelativeLinkedList<T> {
self.set_last(head, element_previous);
}
}
self.set_previous(element, T::funty(0));
self.set_next(element, T::funty(0));
self.set_previous(element, T::zero());
self.set_next(element, T::zero());
self.dec_size(head);
}
}
7 changes: 3 additions & 4 deletions src/lists/relative_doubly_linked_list.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use crate::LinkedList;
use platform_data::LinkType;
use crate::{LinkType, LinkedList};

pub trait RelativeLinkedList<T: LinkType>: LinkedList<T> {
fn get_first(&self, head: T) -> T;
Expand All @@ -11,9 +10,9 @@ pub trait RelativeLinkedList<T: LinkType>: LinkedList<T> {
fn set_size(&mut self, head: T, size: T);

fn inc_size(&mut self, head: T) {
self.set_size(head, self.get_size(head) + T::funty(1))
self.set_size(head, self.get_size(head) + T::one())
}
fn dec_size(&mut self, head: T) {
self.set_size(head, self.get_size(head) - T::funty(1))
self.set_size(head, self.get_size(head) - T::one())
}
}
14 changes: 12 additions & 2 deletions src/trees/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
mod no_recur_szb_tree;
mod szb_tree;

pub use no_recur_szb_tree::NoRecurSzbTree;
pub use szb_tree::SzbTree;
macro_rules! tri {
($expr:expr) => {
match $expr {
Some(x) => x,
None => return false,
}
};
}

pub use {no_recur_szb_tree::NoRecurSzbTree, szb_tree::SzbTree};

pub mod new_v2;
Loading