id_sys/ext/
range_ext.rs

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}