Skip to main content

maplike/
thunderdome.rs

1// SPDX-FileCopyrightText: 2025 maplike contributors
2//
3// SPDX-License-Identifier: MIT OR Apache-2.0
4
5use 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}