1use crate::{IdSlice, IdSliceIndex, UsizeId};
2use std::ops::Range;
3
4impl<TMarker: ?Sized, TValue> IdSliceIndex<IdSlice<TMarker, TValue>> for Range<UsizeId<TMarker>> {
5 type Output = IdSlice<TMarker, TValue>;
6
7 fn get(self, slice: &IdSlice<TMarker, TValue>) -> Option<&Self::Output> {
8 let usize_range = UsizeId::usize_range_from_usize_id_range(self);
9 let slice = slice.as_slice().get(usize_range)?;
10 let id_slice = IdSlice::from_slice(slice);
11 Some(id_slice)
12 }
13
14 fn get_mut(self, slice: &mut IdSlice<TMarker, TValue>) -> Option<&mut Self::Output> {
15 let usize_range = UsizeId::usize_range_from_usize_id_range(self);
16 let mut_slice = slice.as_mut_slice().get_mut(usize_range)?;
17 let mut_id_slice = IdSlice::from_mut_slice(mut_slice);
18 Some(mut_id_slice)
19 }
20
21 fn index(self, slice: &IdSlice<TMarker, TValue>) -> &Self::Output {
22 let usize_range = UsizeId::usize_range_from_usize_id_range(self);
23 IdSlice::from_slice(&slice.as_slice()[usize_range])
24 }
25
26 fn index_mut(self, slice: &mut IdSlice<TMarker, TValue>) -> &mut Self::Output {
27 let usize_range = UsizeId::usize_range_from_usize_id_range(self);
28 IdSlice::from_mut_slice(&mut slice.as_mut_slice()[usize_range])
29 }
30}