trie_me/
set.rs

1use crate::map::Iter;
2use crate::map::TrieMap;
3use std::borrow::Borrow;
4use std::hash::Hash;
5
6pub struct TrieSet<T, A = u8> (TrieMap<T, T, A>);
7
8impl<A: Clone + Eq + Hash, T: AsRef<[A]> + Clone> TrieSet<T, A> {
9	pub fn new() -> Self {
10		Self::default()
11	}
12
13	pub fn clear(&mut self) {
14		let TrieSet (this) = self;
15		this.clear();
16	}
17
18	pub fn contains<S: AsRef<[A]> + ?Sized>(&self, elem: &S) -> bool
19	where T: Borrow<S> {
20		let TrieSet (this) = self;
21		this.contains(elem)
22	}
23
24	pub fn insert(&mut self, elem: T) -> bool {
25		let TrieSet (this) = self;
26		this.insert(&elem.clone(), elem).is_none()
27	}
28
29	pub fn is_empty(&self) -> bool {
30		let TrieSet (this) = self;
31		this.is_empty()
32	}
33
34	pub fn iter(&self) -> Iter<&T> {
35		let TrieSet (this) = self;
36		this.iter()
37	}
38
39	pub fn iter_prefix<S: AsRef<[A]> + ?Sized>(&self, prefix: &S) -> Iter<&T>
40	where T: Borrow<S> {
41		let TrieSet (this) = self;
42		this.iter_prefix(prefix)
43	}
44
45	pub fn len(&self) -> usize {
46		let TrieSet (this) = self;
47		this.len()
48	}
49}
50
51impl<T, A: Clone + Eq + Hash> Default for TrieSet<T, A> {
52	fn default() -> Self {
53		TrieSet (TrieMap::default())
54	}
55}