summaryrefslogtreecommitdiff
path: root/oryxc/src/intern.rs
diff options
context:
space:
mode:
Diffstat (limited to 'oryxc/src/intern.rs')
-rw-r--r--oryxc/src/intern.rs12
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]);
}
}
}