mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-07 05:15:02 +00:00
Deleted fun_treemap
@thestinger and I talked about this in IRC. There are a couple of use cases for a persistent map, but they aren't common enough to justify inclusion in libextra and vary enough that they would require multiple implementations anyways. In any case, fun_treemap in its current state is basically useless.
This commit is contained in:
parent
5f3a637b7c
commit
934a5eba50
@ -55,7 +55,6 @@ pub mod flatpipes;
|
||||
|
||||
pub mod container;
|
||||
pub mod bitv;
|
||||
pub mod fun_treemap;
|
||||
pub mod list;
|
||||
pub mod ringbuf;
|
||||
pub mod priority_queue;
|
||||
|
@ -1,84 +0,0 @@
|
||||
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
/*!
|
||||
* A functional key,value store that works on anything.
|
||||
*
|
||||
* This works using a binary search tree. In the first version, it's a
|
||||
* very naive algorithm, but it will probably be updated to be a
|
||||
* red-black tree or something else.
|
||||
*
|
||||
* This is copied and modified from treemap right now. It's missing a lot
|
||||
* of features.
|
||||
*/
|
||||
|
||||
|
||||
use std::cmp::{Eq, Ord};
|
||||
use std::option::{Some, None};
|
||||
|
||||
pub type Treemap<K, V> = @TreeNode<K, V>;
|
||||
|
||||
enum TreeNode<K, V> {
|
||||
Empty,
|
||||
Node(@K, @V, @TreeNode<K, V>, @TreeNode<K, V>)
|
||||
}
|
||||
|
||||
/// Create a treemap
|
||||
pub fn init<K: 'static, V: 'static>() -> Treemap<K, V> {
|
||||
@Empty
|
||||
}
|
||||
|
||||
/// Insert a value into the map
|
||||
pub fn insert<K:Eq + Ord + 'static,
|
||||
V:'static>(
|
||||
m: Treemap<K, V>,
|
||||
k: K,
|
||||
v: V)
|
||||
-> Treemap<K, V> {
|
||||
@match m {
|
||||
@Empty => Node(@k, @v, @Empty, @Empty),
|
||||
@Node(kk, vv, left, right) => cond!(
|
||||
(k < *kk) { Node(kk, vv, insert(left, k, v), right) }
|
||||
(k == *kk) { Node(kk, @v, left, right) }
|
||||
_ { Node(kk, vv, left, insert(right, k, v)) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// Find a value based on the key
|
||||
pub fn find<K:Eq + Ord + 'static,
|
||||
V:Clone + 'static>(
|
||||
m: Treemap<K, V>,
|
||||
k: K)
|
||||
-> Option<V> {
|
||||
match *m {
|
||||
Empty => None,
|
||||
Node(kk, v, left, right) => cond!(
|
||||
(k == *kk) { Some((*v).clone()) }
|
||||
(k < *kk) { find(left, k) }
|
||||
_ { find(right, k) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// Visit all pairs in the map in order.
|
||||
pub fn traverse<K, V>(m: Treemap<K, V>, f: &fn(&K, &V)) {
|
||||
match *m {
|
||||
Empty => (),
|
||||
// Previously, this had what looked like redundant
|
||||
// matches to me, so I changed it. but that may be a
|
||||
// de-optimization -- tjc
|
||||
Node(@ref k, @ref v, left, right) => {
|
||||
traverse(left, |k,v| f(k,v));
|
||||
f(k, v);
|
||||
traverse(right, |k,v| f(k,v));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user