Skip to content

Commit 617fdd8

Browse files
Rollup merge of #154707 - nik-contrib:substr-new-range, r=Mark-Simulacrum
Make `substr_range` and `subslice_range` return the new `Range` type Makes the unstable `substr_slice` and `substr_range` functions return the new `core::range::Range` type, instead of the old `core::ops::Range`. Unblocks the [stabilization](#141266) of `#![feature(substr_range)]`, see #141266 (comment)
2 parents ccac77a + 8b06612 commit 617fdd8

2 files changed

Lines changed: 17 additions & 11 deletions

File tree

library/core/src/slice/mod.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5297,21 +5297,22 @@ impl<T> [T] {
52975297
/// Basic usage:
52985298
/// ```
52995299
/// #![feature(substr_range)]
5300+
/// use core::range::Range;
53005301
///
53015302
/// let nums = &[0, 5, 10, 0, 0, 5];
53025303
///
53035304
/// let mut iter = nums
53045305
/// .split(|t| *t == 0)
53055306
/// .map(|n| nums.subslice_range(n).unwrap());
53065307
///
5307-
/// assert_eq!(iter.next(), Some(0..0));
5308-
/// assert_eq!(iter.next(), Some(1..3));
5309-
/// assert_eq!(iter.next(), Some(4..4));
5310-
/// assert_eq!(iter.next(), Some(5..6));
5308+
/// assert_eq!(iter.next(), Some(Range { start: 0, end: 0 }));
5309+
/// assert_eq!(iter.next(), Some(Range { start: 1, end: 3 }));
5310+
/// assert_eq!(iter.next(), Some(Range { start: 4, end: 4 }));
5311+
/// assert_eq!(iter.next(), Some(Range { start: 5, end: 6 }));
53115312
/// ```
53125313
#[must_use]
53135314
#[unstable(feature = "substr_range", issue = "126769")]
5314-
pub fn subslice_range(&self, subslice: &[T]) -> Option<Range<usize>> {
5315+
pub fn subslice_range(&self, subslice: &[T]) -> Option<core::range::Range<usize>> {
53155316
if T::IS_ZST {
53165317
panic!("elements are zero-sized");
53175318
}
@@ -5328,7 +5329,11 @@ impl<T> [T] {
53285329
let start = byte_start / size_of::<T>();
53295330
let end = start.wrapping_add(subslice.len());
53305331

5331-
if start <= self.len() && end <= self.len() { Some(start..end) } else { None }
5332+
if start <= self.len() && end <= self.len() {
5333+
Some(core::range::Range { start, end })
5334+
} else {
5335+
None
5336+
}
53325337
}
53335338

53345339
/// Returns the same slice `&[T]`.

library/core/src/str/mod.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ mod validations;
1515

1616
use self::pattern::{DoubleEndedSearcher, Pattern, ReverseSearcher, Searcher};
1717
use crate::char::{self, EscapeDebugExtArgs};
18-
use crate::ops::Range;
18+
use crate::range::Range;
1919
use crate::slice::{self, SliceIndex};
2020
use crate::ub_checks::assert_unsafe_precondition;
2121
use crate::{ascii, mem};
@@ -3112,14 +3112,15 @@ impl str {
31123112
/// # Examples
31133113
/// ```
31143114
/// #![feature(substr_range)]
3115+
/// use core::range::Range;
31153116
///
31163117
/// let data = "a, b, b, a";
31173118
/// let mut iter = data.split(", ").map(|s| data.substr_range(s).unwrap());
31183119
///
3119-
/// assert_eq!(iter.next(), Some(0..1));
3120-
/// assert_eq!(iter.next(), Some(3..4));
3121-
/// assert_eq!(iter.next(), Some(6..7));
3122-
/// assert_eq!(iter.next(), Some(9..10));
3120+
/// assert_eq!(iter.next(), Some(Range { start: 0, end: 1 }));
3121+
/// assert_eq!(iter.next(), Some(Range { start: 3, end: 4 }));
3122+
/// assert_eq!(iter.next(), Some(Range { start: 6, end: 7 }));
3123+
/// assert_eq!(iter.next(), Some(Range { start: 9, end: 10 }));
31233124
/// ```
31243125
#[must_use]
31253126
#[unstable(feature = "substr_range", issue = "126769")]

0 commit comments

Comments
 (0)