diff options
| -rw-r--r-- | src/libcollections/trie.rs | 40 |
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] |
