pub unsafe trait SliceIndex<T>: Sealedwhere
T: ?Sized,{
type Output: ?Sized;
// Required methods
fn get(self, slice: &T) -> Option<&Self::Output>;
fn get_mut(self, slice: &mut T) -> Option<&mut Self::Output>;
unsafe fn get_unchecked(self, slice: *const T) -> *const Self::Output;
unsafe fn get_unchecked_mut(self, slice: *mut T) -> *mut Self::Output;
fn index(self, slice: &T) -> &Self::Output;
fn index_mut(self, slice: &mut T) -> &mut Self::Output;
}
A helper trait used for indexing operations.
Implementations of this trait have to promise that if the argument to get_unchecked(_mut) is a safe reference, then so is the result.
type Output: ?Sized
The output type returned by methods.
fn get(self, slice: &T) -> Option<&Self::Output>
slice_index_methods)
Returns a shared reference to the output at this location, if in bounds.
fn get_mut(self, slice: &mut T) -> Option<&mut Self::Output>
slice_index_methods)
Returns a mutable reference to the output at this location, if in bounds.
unsafe fn get_unchecked(self, slice: *const T) -> *const Self::Output
slice_index_methods)
Returns a pointer to the output at this location, without performing any bounds checking.
Calling this method with an out-of-bounds index or a dangling slice pointer is undefined behavior even if the resulting pointer is not used.
unsafe fn get_unchecked_mut(self, slice: *mut T) -> *mut Self::Output
slice_index_methods)
Returns a mutable pointer to the output at this location, without performing any bounds checking.
Calling this method with an out-of-bounds index or a dangling slice pointer is undefined behavior even if the resulting pointer is not used.
fn index(self, slice: &T) -> &Self::Output
slice_index_methods)
Returns a shared reference to the output at this location, panicking if out of bounds.
fn index_mut(self, slice: &mut T) -> &mut Self::Output
slice_index_methods)
Returns a mutable reference to the output at this location, panicking if out of bounds.
impl SliceIndex<str> for (Bound<usize>, Bound<usize>)Implements substring slicing for arbitrary bounds.
Returns a slice of the given string bounded by the byte indices provided by each bound.
This operation is O(1).
Panics if begin or end (if it exists and once adjusted for inclusion/exclusion) does not point to the starting byte offset of a character (as defined by is_char_boundary), if begin > end, or if end > len.
type Output = str
impl SliceIndex<str> for std::ops::Range<usize>Implements substring slicing with syntax &self[begin .. end] or &mut self[begin .. end].
Returns a slice of the given string from the byte range [begin, end).
This operation is O(1).
Prior to 1.20.0, these indexing operations were still supported by direct implementation of Index and IndexMut.
Panics if begin or end does not point to the starting byte offset of a character (as defined by is_char_boundary), if begin > end, or if end > len.
let s = "Löwe 老虎 Léopard"; assert_eq!(&s[0 .. 1], "L"); assert_eq!(&s[1 .. 9], "öwe 老"); // these will panic: // byte 2 lies within `ö`: // &s[2 ..3]; // byte 8 lies within `老` // &s[1 .. 8]; // byte 100 is outside the string // &s[3 .. 100];
type Output = str
impl SliceIndex<str> for std::ops::RangeFrom<usize>Implements substring slicing with syntax &self[begin ..] or &mut self[begin ..].
Returns a slice of the given string from the byte range [begin, len). Equivalent to &self[begin .. len] or &mut self[begin .. len].
This operation is O(1).
Prior to 1.20.0, these indexing operations were still supported by direct implementation of Index and IndexMut.
Panics if begin does not point to the starting byte offset of a character (as defined by is_char_boundary), or if begin > len.
type Output = str
impl SliceIndex<str> for RangeFullImplements substring slicing with syntax &self[..] or &mut self[..].
Returns a slice of the whole string, i.e., returns &self or &mut self. Equivalent to &self[0 .. len] or &mut self[0 .. len]. Unlike other indexing operations, this can never panic.
This operation is O(1).
Prior to 1.20.0, these indexing operations were still supported by direct implementation of Index and IndexMut.
Equivalent to &self[0 .. len] or &mut self[0 .. len].
type Output = str
impl SliceIndex<str> for std::ops::RangeInclusive<usize>Implements substring slicing with syntax &self[begin ..= end] or &mut self[begin ..= end].
Returns a slice of the given string from the byte range [begin, end]. Equivalent to &self [begin .. end + 1] or &mut self[begin .. end + 1], except if end has the maximum value for usize.
This operation is O(1).
Panics if begin does not point to the starting byte offset of a character (as defined by is_char_boundary), if end does not point to the ending byte offset of a character (end + 1 is either a starting byte offset or equal to len), if begin > end, or if end >= len.
type Output = str
impl SliceIndex<str> for RangeTo<usize>Implements substring slicing with syntax &self[.. end] or &mut self[.. end].
Returns a slice of the given string from the byte range [0, end). Equivalent to &self[0 .. end] or &mut self[0 .. end].
This operation is O(1).
Prior to 1.20.0, these indexing operations were still supported by direct implementation of Index and IndexMut.
Panics if end does not point to the starting byte offset of a character (as defined by is_char_boundary), or if end > len.
type Output = str
impl SliceIndex<str> for std::ops::RangeToInclusive<usize>Implements substring slicing with syntax &self[..= end] or &mut self[..= end].
Returns a slice of the given string from the byte range [0, end]. Equivalent to &self [0 .. end + 1], except if end has the maximum value for usize.
This operation is O(1).
Panics if end does not point to the ending byte offset of a character (end + 1 is either a starting byte offset as defined by is_char_boundary, or equal to len), or if end >= len.
type Output = str
impl SliceIndex<str> for std::range::Range<usize>
type Output = str
impl SliceIndex<str> for std::range::RangeFrom<usize>
type Output = str
impl SliceIndex<str> for std::range::RangeInclusive<usize>
type Output = str
impl SliceIndex<ByteStr> for (Bound<usize>, Bound<usize>)
type Output = ByteStr
impl SliceIndex<ByteStr> for usize
type Output = u8
impl SliceIndex<ByteStr> for std::ops::Range<usize>
type Output = ByteStr
impl SliceIndex<ByteStr> for std::ops::RangeFrom<usize>
type Output = ByteStr
impl SliceIndex<ByteStr> for RangeFull
type Output = ByteStr
impl SliceIndex<ByteStr> for std::ops::RangeInclusive<usize>
type Output = ByteStr
impl SliceIndex<ByteStr> for RangeTo<usize>
type Output = ByteStr
impl SliceIndex<ByteStr> for std::ops::RangeToInclusive<usize>
type Output = ByteStr
impl SliceIndex<ByteStr> for std::range::Range<usize>
type Output = ByteStr
impl SliceIndex<ByteStr> for std::range::RangeFrom<usize>
type Output = ByteStr
impl SliceIndex<ByteStr> for std::range::RangeInclusive<usize>
type Output = ByteStr
impl<T> SliceIndex<[T]> for (Bound<usize>, Bound<usize>)
type Output = [T]
impl<T> SliceIndex<[T]> for usizeThe methods index and index_mut panic if the index is out of bounds.
type Output = T
impl<T> SliceIndex<[T]> for Clamp<usize>
type Output = T
impl<T> SliceIndex<[T]> for Clamp<Range<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeFrom<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeFull>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeInclusive<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeTo<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeToInclusive<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<Range<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeFrom<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeInclusive<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeToInclusive<usize>>
type Output = [T]
impl<T> SliceIndex<[T]> for Last
type Output = T
impl<T> SliceIndex<[T]> for std::ops::Range<usize>The methods index and index_mut panic if:
type Output = [T]
impl<T> SliceIndex<[T]> for std::ops::RangeFrom<usize>The methods index and index_mut panic if the start of the range is out of bounds.
type Output = [T]
impl<T> SliceIndex<[T]> for RangeFull
type Output = [T]
impl<T> SliceIndex<[T]> for std::ops::RangeInclusive<usize>The methods index and index_mut panic if:
usize::MAX ortype Output = [T]
impl<T> SliceIndex<[T]> for RangeTo<usize>The methods index and index_mut panic if the end of the range is out of bounds.
type Output = [T]
impl<T> SliceIndex<[T]> for std::ops::RangeToInclusive<usize>The methods index and index_mut panic if the end of the range is out of bounds.
type Output = [T]
impl<T> SliceIndex<[T]> for std::range::Range<usize>
type Output = [T]
impl<T> SliceIndex<[T]> for std::range::RangeFrom<usize>
type Output = [T]
impl<T> SliceIndex<[T]> for std::range::RangeInclusive<usize>
type Output = [T]
impl<T> SliceIndex<[T]> for std::range::RangeToInclusive<usize>The methods index and index_mut panic if the end of the range is out of bounds.
type Output = [T]
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/slice/trait.SliceIndex.html