From 13d07ad0a623a8ceaaee4c5af20de1d1d8afddf7 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sun, 20 Jan 2013 13:46:06 -0500 Subject: [PATCH] add a Set trait and implement it for TreeSet --- src/libcore/container.rs | 24 ++++++++++++++++++++++++ src/libcore/core.rc | 1 + src/libstd/treemap.rs | 29 ++++++++++++++++------------- 3 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 src/libcore/container.rs diff --git a/src/libcore/container.rs b/src/libcore/container.rs new file mode 100644 index 000000000000..619622ceb951 --- /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 b800564b8e10..24623f20c80c 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 b5f60a66978e..1b20b35bda1f 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 {