MCPcopy Index your code
hub / github.com/RustPython/RustPython / do_slice_reverse

Method do_slice_reverse

crates/vm/src/builtins/str.rs:1833–1865  ·  view source on GitHub ↗
(&self, range: Range<usize>)

Source from the content-addressed store, hash-verified

1831 }
1832
1833 fn do_slice_reverse(&self, range: Range<usize>) -> Self::Sliced {
1834 match self.as_str_kind() {
1835 PyKindStr::Ascii(s) => {
1836 let mut out = s[range].to_owned();
1837 out.as_mut_slice().reverse();
1838 out.into()
1839 }
1840 PyKindStr::Utf8(s) => {
1841 let char_len = range.len();
1842 let mut out = String::with_capacity(2 * char_len);
1843 out.extend(
1844 s.chars()
1845 .rev()
1846 .skip(self.char_len() - range.end)
1847 .take(range.len()),
1848 );
1849 // SAFETY: char_len is accurate
1850 unsafe { Self::new_with_char_len(out, range.len()) }
1851 }
1852 PyKindStr::Wtf8(w) => {
1853 let char_len = range.len();
1854 let mut out = Wtf8Buf::with_capacity(2 * char_len);
1855 out.extend(
1856 w.code_points()
1857 .rev()
1858 .skip(self.char_len() - range.end)
1859 .take(range.len()),
1860 );
1861 // SAFETY: char_len is accurate
1862 unsafe { Self::new_with_char_len(out, char_len) }
1863 }
1864 }
1865 }
1866
1867 fn do_stepped_slice(&self, range: Range<usize>, step: usize) -> Self::Sliced {
1868 match self.as_str_kind() {

Callers

nothing calls this directly

Calls 12

charsMethod · 0.80
code_pointsMethod · 0.80
as_str_kindMethod · 0.45
to_ownedMethod · 0.45
reverseMethod · 0.45
as_mut_sliceMethod · 0.45
lenMethod · 0.45
extendMethod · 0.45
takeMethod · 0.45
skipMethod · 0.45
revMethod · 0.45
char_lenMethod · 0.45

Tested by

no test coverage detected