Rollup merge of #129276 - eduardosm:stabilize-char_indices_offset, r=Amanieu

Stabilize feature `char_indices_offset`

Stabilized API:

```rust
impl CharIndices<'_> {
    pub fn offset(&self) -> usize;
}
```

Tracking issue: https://github.com/rust-lang/rust/issues/83871

Closes https://github.com/rust-lang/rust/issues/83871

I also attempted to improved the documentation to make it more clear that it returns the offset of the character that will be returned by the next call to `next()`.
This commit is contained in:
Guillaume Gomez 2024-08-23 12:32:15 +02:00 committed by GitHub
commit 26672c93d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 3 deletions

View File

@ -110,7 +110,6 @@
#![cfg_attr(bootstrap, feature(offset_of_nested))] #![cfg_attr(bootstrap, feature(offset_of_nested))]
#![feature(array_ptr_get)] #![feature(array_ptr_get)]
#![feature(asm_experimental_arch)] #![feature(asm_experimental_arch)]
#![feature(char_indices_offset)]
#![feature(const_align_of_val)] #![feature(const_align_of_val)]
#![feature(const_align_of_val_raw)] #![feature(const_align_of_val_raw)]
#![feature(const_align_offset)] #![feature(const_align_offset)]

View File

@ -241,24 +241,35 @@ impl<'a> CharIndices<'a> {
/// Returns the byte position of the next character, or the length /// Returns the byte position of the next character, or the length
/// of the underlying string if there are no more characters. /// of the underlying string if there are no more characters.
/// ///
/// This means that, when the iterator has not been fully consumed,
/// the returned value will match the index that will be returned
/// by the next call to [`next()`](Self::next).
///
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// #![feature(char_indices_offset)]
/// let mut chars = "a楽".char_indices(); /// let mut chars = "a楽".char_indices();
/// ///
/// // `next()` has not been called yet, so `offset()` returns the byte
/// // index of the first character of the string, which is always 0.
/// assert_eq!(chars.offset(), 0); /// assert_eq!(chars.offset(), 0);
/// // As expected, the first call to `next()` also returns 0 as index.
/// assert_eq!(chars.next(), Some((0, 'a'))); /// assert_eq!(chars.next(), Some((0, 'a')));
/// ///
/// // `next()` has been called once, so `offset()` returns the byte index
/// // of the second character ...
/// assert_eq!(chars.offset(), 1); /// assert_eq!(chars.offset(), 1);
/// // ... which matches the index returned by the next call to `next()`.
/// assert_eq!(chars.next(), Some((1, '楽'))); /// assert_eq!(chars.next(), Some((1, '楽')));
/// ///
/// // Once the iterator has been consumed, `offset()` returns the length
/// // in bytes of the string.
/// assert_eq!(chars.offset(), 4); /// assert_eq!(chars.offset(), 4);
/// assert_eq!(chars.next(), None); /// assert_eq!(chars.next(), None);
/// ``` /// ```
#[inline] #[inline]
#[must_use] #[must_use]
#[unstable(feature = "char_indices_offset", issue = "83871")] #[stable(feature = "char_indices_offset", since = "CURRENT_RUSTC_VERSION")]
pub fn offset(&self) -> usize { pub fn offset(&self) -> usize {
self.front_offset self.front_offset
} }