offset_vec/
slice.rs

1use core::ops::{IndexMut, Range, RangeFrom, RangeTo};
2
3pub trait Slice
4    : IndexMut<Range<usize>, Output = Self>
5    + IndexMut<RangeTo<usize>, Output = Self>
6    + IndexMut<RangeFrom<usize>, Output = Self>
7{
8    fn len(&self) -> usize;
9
10    #[inline]
11    fn is_empty(&self) -> bool {
12        self.len() == 0
13    }
14
15    fn transform_index(&self, index: usize) -> usize;
16}
17
18impl<T> Slice for [T] {
19    #[inline]
20    fn len(&self) -> usize {
21        self.len()
22    }
23
24    fn transform_index(&self, index: usize) -> usize {
25        index
26    }
27}
28impl Slice for str {
29    #[inline]
30    fn len(&self) -> usize {
31        self.len()
32    }
33
34    fn transform_index(&self, index: usize) -> usize {
35        crate::util::transform_char_index(self, index)
36    }
37}