sim_lib_sequence/mutable/
ordered_set.rs1#[derive(Debug)]
3pub struct OrderedSet<K, E> {
4 table: OrderedTable<K, (), E>,
5}
6impl<K, E> OrderedSet<K, E>
7where
8 E: KeyEquivalence<K>,
9{
10 pub fn new(equivalence: E) -> Self {
12 Self {
13 table: OrderedTable::new(equivalence),
14 }
15 }
16
17 pub fn len(&self) -> usize {
19 self.table.len()
20 }
21
22 pub fn is_empty(&self) -> bool {
24 self.table.is_empty()
25 }
26
27 pub fn contains(&self, key: &K) -> bool {
29 self.table.get(key).is_some()
30 }
31
32 pub fn insert(&self, key: K) -> bool {
34 self.table.insert(key, ()).is_none()
35 }
36
37 pub fn remove(&self, key: &K) -> bool {
39 self.table.remove(key).is_some()
40 }
41
42 pub fn iter(&self) -> OrderedSetIter<K> {
44 OrderedSetIter {
45 inner: self.table.iter(),
46 }
47 }
48
49 pub fn compact(&self, max_work: usize) -> CompactionResult {
51 self.table.compact(max_work)
52 }
53}
54
55pub struct OrderedSetIter<K> {
57 inner: OrderedTableIter<K, ()>,
58}
59
60impl<K> Clone for OrderedSetIter<K> {
61 fn clone(&self) -> Self {
62 Self {
63 inner: self.inner.clone(),
64 }
65 }
66}
67
68impl<K> Iterator for OrderedSetIter<K>
69where
70 K: Clone,
71{
72 type Item = K;
73
74 fn next(&mut self) -> Option<Self::Item> {
75 self.inner.next().map(|(key, ())| key)
76 }
77}