teardown_tree___treap/set.rs
1use map::TreapMap;
2
3/// A set based on a randomized treap
4pub struct TreapSet<T> {
5 map: TreapMap<T, ()>,
6}
7
8impl<T: Ord> TreapSet<T> {
9
10 /// Returns a new empty set.
11 ///
12 /// ```
13 /// let mut s = treap::TreapSet::new();
14 /// assert_eq!(s.len(), 0);
15 /// s.insert(5);
16 /// ```
17 pub fn new() -> TreapSet<T> {
18 TreapSet {
19 map: TreapMap::new(),
20 }
21 }
22
23 /// Returns the number of elements in the set.
24 pub fn len(&self) -> usize { self.map.len() }
25
26 /// Remove all elements from the set.
27 pub fn clean(&mut self) { self.map.clear() }
28
29 /// Returns true if the set is empty.
30 pub fn is_empty(&self) -> bool { self.map.is_empty() }
31
32 /// Returns true if the item is in the set.
33 pub fn contains(&self, item: &T) -> bool {
34 self.map.get(item).is_some()
35 }
36
37 /// Add a item to the set. Returns true if the item was not in the set already.
38 pub fn insert(&mut self, item: T) -> bool {
39 self.map.insert(item, ()).is_none()
40 }
41
42 /// Remove a item from the set. Returns true if the item was in the set.
43 pub fn remove(&mut self, item: &T) -> bool {
44 self.map.remove(item).is_some()
45 }
46}