use alloc::vec::Vec;
use core::ops::DerefMut;
use super::super::{AllocatedStorage, IndexKey};
pub trait UniqueIndexBacking<Key: IndexKey> {
type Keys;
type Buckets: DerefMut<Target = [u32]>;
fn keys(keys: &Self::Keys) -> &[Key];
fn keys_mut(keys: &mut Self::Keys) -> &mut [Key];
fn append(keys: &mut Self::Keys, key: Key);
fn remove(keys: &mut Self::Keys, row: usize);
}
impl<Key: IndexKey> UniqueIndexBacking<Key> for AllocatedStorage {
type Keys = Vec<Key>;
type Buckets = Vec<u32>;
fn keys(keys: &Self::Keys) -> &[Key] {
keys
}
fn keys_mut(keys: &mut Self::Keys) -> &mut [Key] {
keys
}
fn append(keys: &mut Self::Keys, key: Key) {
keys.push(key);
}
fn remove(keys: &mut Self::Keys, row: usize) {
keys.swap_remove(row);
}
}