Skip to main content

maplike/
stable_vec.rs

1// SPDX-FileCopyrightText: 2025 maplike contributors
2//
3// SPDX-License-Identifier: MIT OR Apache-2.0
4
5use stable_vec::StableVecFacade;
6
7use crate::{Get, Insert, IntoIter, KeyedCollection, Push, Remove, Set, StableRemove};
8
9impl<V, C: stable_vec::core::Core<V>> KeyedCollection for StableVecFacade<V, C> {
10    type Key = usize;
11    type Value = V;
12}
13
14impl<V, C: stable_vec::core::Core<V>> Get<usize> for StableVecFacade<V, C> {
15    #[inline(always)]
16    fn get(&self, index: &usize) -> Option<&V> {
17        StableVecFacade::get(self, *index)
18    }
19}
20
21impl<V, C: stable_vec::core::Core<V>> Set<usize> for StableVecFacade<V, C> {
22    #[inline(always)]
23    fn set(&mut self, index: usize, value: V) {
24        StableVecFacade::insert(self, index, value);
25    }
26}
27
28impl<V, C: stable_vec::core::Core<V>> Insert<usize> for StableVecFacade<V, C> {
29    #[inline(always)]
30    fn insert(&mut self, index: usize, value: V) {
31        self.reserve_for(index);
32        StableVecFacade::insert(self, index, value);
33    }
34}
35
36impl<V, C: stable_vec::core::Core<V>> Remove<usize> for StableVecFacade<V, C> {
37    #[inline(always)]
38    fn remove(&mut self, index: &usize) -> Option<V> {
39        self.get(*index)?;
40        StableVecFacade::remove(self, *index)
41    }
42}
43
44impl<V, C: stable_vec::core::Core<V>> StableRemove<usize> for StableVecFacade<V, C> {}
45
46impl<V, C: stable_vec::core::Core<V>> Push<usize> for StableVecFacade<V, C> {
47    #[inline(always)]
48    fn push(&mut self, value: V) -> usize {
49        StableVecFacade::push(self, value)
50    }
51}
52
53impl<V, C: stable_vec::core::Core<V>> IntoIter<usize> for StableVecFacade<V, C> {
54    type IntoIter = stable_vec::iter::IntoIter<V, C>;
55
56    #[inline(always)]
57    fn into_iter(self) -> stable_vec::iter::IntoIter<V, C> {
58        IntoIterator::into_iter(self)
59    }
60}