Clean up the other Slice*Inclusive impls for str
A previous PR fixed one method that was legitimately buggy; this cleans up the rest to be less diverse, mirroring the corresponding impls on [T] to the greatest extent possible without introducing any unnecessary UTF-8 boundary checks at 0.
This commit is contained in:
parent
5ab4c811ca
commit
6b749b0113
1 changed files with 10 additions and 24 deletions
|
@ -2035,19 +2035,13 @@ mod traits {
|
|||
type Output = str;
|
||||
#[inline]
|
||||
fn get(self, slice: &str) -> Option<&Self::Output> {
|
||||
if let Some(end) = self.end.checked_add(1) {
|
||||
(self.start..end).get(slice)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
if self.end == usize::max_value() { None }
|
||||
else { (self.start..self.end+1).get(slice) }
|
||||
}
|
||||
#[inline]
|
||||
fn get_mut(self, slice: &mut str) -> Option<&mut Self::Output> {
|
||||
if let Some(end) = self.end.checked_add(1) {
|
||||
(self.start..end).get_mut(slice)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
if self.end == usize::max_value() { None }
|
||||
else { (self.start..self.end+1).get_mut(slice) }
|
||||
}
|
||||
#[inline]
|
||||
unsafe fn get_unchecked(self, slice: &str) -> &Self::Output {
|
||||
|
@ -2076,29 +2070,21 @@ mod traits {
|
|||
type Output = str;
|
||||
#[inline]
|
||||
fn get(self, slice: &str) -> Option<&Self::Output> {
|
||||
if self.end < usize::max_value() && slice.is_char_boundary(self.end + 1) {
|
||||
Some(unsafe { self.get_unchecked(slice) })
|
||||
} else {
|
||||
None
|
||||
}
|
||||
if self.end == usize::max_value() { None }
|
||||
else { (..self.end+1).get(slice) }
|
||||
}
|
||||
#[inline]
|
||||
fn get_mut(self, slice: &mut str) -> Option<&mut Self::Output> {
|
||||
if self.end < usize::max_value() && slice.is_char_boundary(self.end + 1) {
|
||||
Some(unsafe { self.get_unchecked_mut(slice) })
|
||||
} else {
|
||||
None
|
||||
}
|
||||
if self.end == usize::max_value() { None }
|
||||
else { (..self.end+1).get_mut(slice) }
|
||||
}
|
||||
#[inline]
|
||||
unsafe fn get_unchecked(self, slice: &str) -> &Self::Output {
|
||||
let ptr = slice.as_ptr();
|
||||
super::from_utf8_unchecked(slice::from_raw_parts(ptr, self.end + 1))
|
||||
(..self.end+1).get_unchecked(slice)
|
||||
}
|
||||
#[inline]
|
||||
unsafe fn get_unchecked_mut(self, slice: &mut str) -> &mut Self::Output {
|
||||
let ptr = slice.as_ptr();
|
||||
super::from_utf8_unchecked_mut(slice::from_raw_parts_mut(ptr as *mut u8, self.end + 1))
|
||||
(..self.end+1).get_unchecked_mut(slice)
|
||||
}
|
||||
#[inline]
|
||||
fn index(self, slice: &str) -> &Self::Output {
|
||||
|
|
Loading…
Reference in a new issue