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}