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}