Crates.io | t-oc |
lib.rs | t-oc |
version | 7.0.1 |
created_at | 2024-11-14 23:13:25.508883+00 |
updated_at | 2025-05-11 19:18:40.166794+00 |
description | Trie Occurrence Counter is frequency dictionary for any type implementing Iterator |
homepage | |
repository | https://github.com/deep-outcome/t-oc |
max_upload_size | |
id | 1448423 |
size | 56,801 |
trie occurrence counter is frequency dictionary that uses any impl Iterator<Item = char>
type as occurrent
since its flexibility it allows to count apples with pears without hassle
core::str::Chars
is impl Iterator<Item = char>
type usage with str
is oobuse t_oc::Toc;
use std::panic::catch_unwind;
let mut toc = Toc::new();
let occurrent = "true";
_ = toc.add(occurrent.chars(), None);
_ = toc.add(true.to_string().chars(), None);
assert_eq!(2, toc.acq(occurrent.chars()).uproot());
toc.put(occurrent.chars(), 15);
assert_eq!(15, toc.acq(occurrent.chars()).uproot());
let catch = catch_unwind(move|| _ = toc.add("#&%".chars(), None));
assert!(catch.is_err());
Toc::new_with
new_with
use t_oc::Toc;
struct UsizeCharIterator {
s: String,
c: usize,
}
impl Iterator for UsizeCharIterator {
type Item = char;
fn next(&mut self) -> Option<char> {
let c = self.c;
let opt = self.s.chars().nth(c);
if opt.is_some() {
self.c = c + 1;
}
opt
}
}
impl UsizeCharIterator {
fn new(n: usize) -> Self {
Self { s: n.to_string(), c: 0 }
}
}
fn ix(c: char) -> usize {
c.to_digit(10).unwrap() as usize
}
#[test]
fn test() {
let nums = [0, 2, 2, 100, 100, 9999];
let mut toc = Toc::new_with(ix, None, 10);
for n in nums {
_ = toc.add(UsizeCharIterator::new(n), None);
}
assert_eq!(1, toc.acq(UsizeCharIterator::new(0)).uproot());
assert_eq!(2, toc.acq(UsizeCharIterator::new(2)).uproot());
assert_eq!(2, toc.acq(UsizeCharIterator::new(100)).uproot());
assert_eq!(1, toc.acq(UsizeCharIterator::new(9999)).uproot());
}