diff --git a/src/libcore/container.rs b/src/libcore/container.rs new file mode 100644 index 0000000000000000000000000000000000000000..619622ceb95112d6381d03460b3ed78ce0eb5839 --- /dev/null +++ b/src/libcore/container.rs @@ -0,0 +1,24 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! Container traits + +pub trait Set { + /// Return true if the set contains a value + pure fn contains(&self, value: &T) -> bool; + + /// Add a value to the set. Return true if the value was not already + /// present in the set. + fn insert(&mut self, value: T) -> bool; + + /// Remove a value from the set. Return true if the value was + /// present in the set. + fn remove(&mut self, value: &T) -> bool; +} diff --git a/src/libcore/core.rc b/src/libcore/core.rc index b800564b8e10c14f3fa2a51567bb2224577d5e7d..24623f20c80c1d5a2027729633cf0be4d2836478 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -122,6 +122,7 @@ pub mod to_bytes; pub mod clone; pub mod io; pub mod hash; +pub mod container; /* Common data structures */ diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index b5f60a66978e657868ad84793c730cafc7e1f4b4..1b20b35bda1fbf7fe68612c021a42e7a47b62128 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -14,6 +14,7 @@ #[forbid(deprecated_mode)]; +use core::container::Set; use core::cmp::{Eq, Ord}; use core::option::{Option, Some, None}; use core::prelude::*; @@ -197,6 +198,21 @@ impl TreeSet: Eq { pure fn ne(&self, other: &TreeSet) -> bool { self.map != other.map } } +impl TreeSet: Set { + /// Return true if the set contains a value + pure fn contains(&self, value: &T) -> bool { + self.map.contains_key(value) + } + + /// Add a value to the set. Return true if the value was not already + /// present in the set. + fn insert(&mut self, value: T) -> bool { self.map.insert(value, ()) } + + /// Remove a value from the set. Return true if the value was + /// present in the set. + fn remove(&mut self, value: &T) -> bool { self.map.remove(value) } +} + impl TreeSet { /// Create an empty TreeSet static pure fn new() -> TreeSet { TreeSet{map: TreeMap::new()} } @@ -215,19 +231,6 @@ impl TreeSet { self.map.each_key_reverse(f) } - /// Return true if the set contains a value - pure fn contains(&self, value: &T) -> bool { - self.map.contains_key(value) - } - - /// Add a value to the set. Return true if the value was not - /// already present in the set. - fn insert(&mut self, value: T) -> bool { self.map.insert(value, ()) } - - /// Remove a value from the set. Return true if the value was - /// present in the set. - fn remove(&mut self, value: &T) -> bool { self.map.remove(value) } - /// Get a lazy iterator over the values in the set. /// Requires that it be frozen (immutable). pure fn iter(&self) -> TreeSetIterator/&self {