about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libcollections/trie.rs40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/libcollections/trie.rs b/src/libcollections/trie.rs
index 740a3637700..8b83e658386 100644
--- a/src/libcollections/trie.rs
+++ b/src/libcollections/trie.rs
@@ -293,32 +293,46 @@ impl Mutable for TrieSet {
     fn clear(&mut self) { self.map.clear() }
 }
 
-impl TrieSet {
-    /// Create an empty TrieSet
+impl Set<uint> for TrieSet {
     #[inline]
-    pub fn new() -> TrieSet {
-        TrieSet{map: TrieMap::new()}
+    fn contains(&self, value: &uint) -> bool {
+        self.map.contains_key(value)
     }
 
-    /// Return true if the set contains a value
     #[inline]
-    pub fn contains(&self, value: &uint) -> bool {
-        self.map.contains_key(value)
+    fn is_disjoint(&self, other: &TrieSet) -> bool {
+        self.iter().all(|v| !other.contains(&v))
     }
 
-    /// Add a value to the set. Return true if the value was not already
-    /// present in the set.
     #[inline]
-    pub fn insert(&mut self, value: uint) -> bool {
+    fn is_subset(&self, other: &TrieSet) -> bool {
+        self.iter().all(|v| other.contains(&v))
+    }
+
+    #[inline]
+    fn is_superset(&self, other: &TrieSet) -> bool {
+        other.is_subset(self)
+    }
+}
+
+impl MutableSet<uint> for TrieSet {
+    #[inline]
+    fn insert(&mut self, value: uint) -> bool {
         self.map.insert(value, ())
     }
 
-    /// Remove a value from the set. Return true if the value was
-    /// present in the set.
     #[inline]
-    pub fn remove(&mut self, value: &uint) -> bool {
+    fn remove(&mut self, value: &uint) -> bool {
         self.map.remove(value)
     }
+}
+
+impl TrieSet {
+    /// Create an empty TrieSet
+    #[inline]
+    pub fn new() -> TrieSet {
+        TrieSet{map: TrieMap::new()}
+    }
 
     /// Visit all values in reverse order
     #[inline]