diff options
| author | Thomas Voss <mail@thomasvoss.com> | 2026-03-29 23:09:46 +0200 |
|---|---|---|
| committer | Thomas Voss <mail@thomasvoss.com> | 2026-03-29 23:09:46 +0200 |
| commit | da65ee39162d0323321340b2a9cef9a013ad36ef (patch) | |
| tree | 127f6afd6bb418c5df3216e1ad83239aa693ef77 /oryxc/src/intern.rs | |
| parent | db11ea02d777a33fedb6af4ee056e85f52fbb008 (diff) | |
Beginning sema work
Diffstat (limited to 'oryxc/src/intern.rs')
| -rw-r--r-- | oryxc/src/intern.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/oryxc/src/intern.rs b/oryxc/src/intern.rs index 5fb5cd0..86088a8 100644 --- a/oryxc/src/intern.rs +++ b/oryxc/src/intern.rs @@ -5,7 +5,7 @@ use dashmap::DashMap; pub struct Interner<V, I> where - V: Copy + Eq + Hash, + V: Clone + Eq + Hash, I: Copy + From<usize> + Into<usize>, { map: DashMap<V, I>, @@ -14,7 +14,7 @@ where impl<V, I> Interner<V, I> where - V: Copy + Eq + Hash, + V: Clone + Eq + Hash, I: Copy + From<usize> + Into<usize>, { pub fn new() -> Self { @@ -24,15 +24,15 @@ where }; } - pub fn get(&self, key: I) -> V { - return self.store[key.into()]; + pub fn get(&self, key: I) -> &V { + return &self.store[key.into()]; } pub fn intern(&self, value: V) -> I { if let Some(key) = self.map.get(&value) { return *key; } - let key = self.store.push(value).into(); + let key = self.store.push(value.clone()).into(); self.map.insert(value, key); return key; } @@ -66,7 +66,7 @@ mod tests { let ys = xs.iter().map(|&x| interner.intern(x)).collect::<Vec<_>>(); for i in 0..ys.len() { - assert_eq!(interner.get(ys[i]), xs[0]); + assert_eq!(*interner.get(ys[i]), xs[0]); } } } |