From 5b9905b0f3fdb61a9371dfd029c03d71317b1cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20H=C3=B6rnvall?= Date: Sat, 27 Feb 2021 12:45:18 +0100 Subject: [PATCH] Added CharIndices::offset function --- library/core/src/lib.rs | 1 + library/core/src/str/iter.rs | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/library/core/src/lib.rs b/library/core/src/lib.rs index 64e2a9513099..2fcb2ca92484 100644 --- a/library/core/src/lib.rs +++ b/library/core/src/lib.rs @@ -137,6 +137,7 @@ #![feature(stmt_expr_attributes)] #![feature(str_split_as_str)] #![feature(str_split_inclusive_as_str)] +#![feature(char_indices_offset)] #![feature(trait_alias)] #![feature(transparent_unions)] #![feature(try_blocks)] diff --git a/library/core/src/str/iter.rs b/library/core/src/str/iter.rs index 83f484dc570c..cd67c7737803 100644 --- a/library/core/src/str/iter.rs +++ b/library/core/src/str/iter.rs @@ -189,6 +189,29 @@ impl<'a> CharIndices<'a> { pub fn as_str(&self) -> &'a str { self.iter.as_str() } + + /// Returns the byte position of the next character, or the length + /// of the underlying string if there are no more characters. + /// + /// # Examples + /// + /// ``` + /// let mut chars = "a楽".char_indices(); + /// + /// assert_eq!(chars.offset(), 0); + /// assert_eq!(chars.next(), Some((0, 'a'))); + /// + /// assert_eq!(chars.offset(), 1); + /// assert_eq!(chars.next(), Some((1, '楽'))); + /// + /// assert_eq!(chars.offset(), 4); + /// assert_eq!(chars.next(), None); + /// ``` + #[inline] + #[unstable(feature = "char_indices_offset", issue = "none")] + pub fn offset(&self) -> usize { + self.front_offset + } } /// An iterator over the bytes of a string slice.