1use super::Backend;
2
3pub struct VecBackend<T> {
5 buf: Vec<T>,
6}
7
8impl<T> Default for VecBackend<T> {
9 fn default() -> Self {
10 Self { buf: Default::default() }
11 }
12}
13
14#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq)]
15#[repr(transparent)]
16pub struct Symbol(usize);
17
18impl<T: Clone> Backend<T> for VecBackend<T> {
19 type Symbol = Symbol;
20
21 fn intern(&mut self, src: &T) -> Self::Symbol {
22 let sym = Symbol(self.buf.len());
23 self.buf.push(src.clone());
24 sym
25 }
26
27 fn get(&self, sym: Symbol) -> Option<&T> {
28 let val = self.buf.get(sym.0)?;
29 Some(val)
30 }
31}