diff options
Diffstat (limited to 'vendor/string_cache/examples')
-rw-r--r-- | vendor/string_cache/examples/simple.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/vendor/string_cache/examples/simple.rs b/vendor/string_cache/examples/simple.rs new file mode 100644 index 000000000..f063b06bc --- /dev/null +++ b/vendor/string_cache/examples/simple.rs @@ -0,0 +1,26 @@ + + +use string_cache::DefaultAtom; + +fn main() { + let mut interned_stuff = Vec::new(); + let text = "here is a sentence of text that will be tokenised and interned and some repeated \ + tokens is of text and"; + for word in text.split_whitespace() { + let seen_before = interned_stuff + .iter() + // We can use impl PartialEq<T> where T is anything string-like to compare to + // interned strings to either other interned strings, or actual strings Comparing two + // interned strings is very fast (normally a single cpu operation). + .filter(|interned_word| interned_word == &word) + .count(); + if seen_before > 0 { + println!(r#"Seen the word "{}" {} times"#, word, seen_before); + } else { + println!(r#"Not seen the word "{}" before"#, word); + } + // We use the impl From<(Cow<'a, str>, or &'a str, or String) for Atom<Static> to intern a + // new string + interned_stuff.push(DefaultAtom::from(word)); + } +} |