tiger_lib/
special_tokens.rs1use crate::helpers::TigerHashSet;
2use crate::token::{Token, TokenIdentity};
3
4#[derive(Debug, Clone)]
5pub struct SpecialTokens {
6 st: Option<TigerHashSet<TokenIdentity>>,
7}
8
9impl SpecialTokens {
10 pub fn none() -> Self {
11 SpecialTokens { st: None }
12 }
13
14 #[allow(dead_code)]
15 pub fn empty() -> Self {
16 SpecialTokens { st: Some(TigerHashSet::default()) }
17 }
18
19 #[allow(dead_code)]
20 pub fn iter(&self) -> impl Iterator<Item = &Token> {
21 self.st.iter().flat_map(|set| set.iter().map(TokenIdentity::inner))
22 }
23
24 #[allow(dead_code)]
25 pub fn into_iter(self) -> impl IntoIterator<Item = Token> {
26 self.st.into_iter().flat_map(|set| set.into_iter().map(TokenIdentity::into_inner))
27 }
28
29 pub fn insert<T: Into<Token>>(&mut self, token: T) {
30 if let Some(ref mut st) = self.st {
31 st.insert(TokenIdentity::new(token.into()));
32 }
33 }
34
35 pub fn merge(&mut self, other: &Self) {
36 for token in other.iter() {
37 self.insert(token);
38 }
39 }
40}