diff options
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]); } } } |