1use thunderdome::{Arena, Index};
6
7use crate::{Clear, Get, Insert, IntoIter, KeyedCollection, Push, Remove, Set, StableRemove};
8
9impl<V> KeyedCollection for Arena<V> {
10 type Key = Index;
11 type Value = V;
12}
13
14impl<V> Get<Index> for Arena<V> {
15 #[inline(always)]
16 fn get(&self, key: &Index) -> Option<&V> {
17 Arena::get(self, *key)
18 }
19}
20
21impl<V> Set<Index> for Arena<V> {
22 #[inline(always)]
23 fn set(&mut self, key: Index, value: V) {
24 Arena::insert_at(self, key, value);
25 }
26}
27
28impl<V> Insert<Index> for Arena<V> {
29 #[inline(always)]
30 fn insert(&mut self, key: Index, value: V) {
31 Arena::insert_at(self, key, value);
32 }
33}
34
35impl<V> Remove<Index> for Arena<V> {
36 #[inline(always)]
37 fn remove(&mut self, key: &Index) -> Option<V> {
38 Arena::remove(self, *key)
39 }
40}
41
42impl<V> StableRemove<Index> for Arena<V> {}
43
44impl<V> Push<Index> for Arena<V> {
45 #[inline(always)]
46 fn push(&mut self, value: V) -> Index {
47 Arena::insert(self, value)
48 }
49}
50
51impl<V> Clear for Arena<V> {
52 #[inline(always)]
53 fn clear(&mut self) {
54 Arena::clear(self);
55 }
56}
57
58impl<V> IntoIter<Index> for Arena<V> {
59 type IntoIter = thunderdome::iter::IntoIter<V>;
60
61 #[inline(always)]
62 fn into_iter(self) -> thunderdome::iter::IntoIter<V> {
63 IntoIterator::into_iter(self)
64 }
65}