Struct bstr::CharIndices[][src]

pub struct CharIndices<'a> { /* fields omitted */ }

An iterator over Unicode scalar values in a byte string and their byte index positions.

When invalid UTF-8 byte sequences are found, they are substituted with the Unicode replacement codepoint (U+FFFD) using the “maximal subpart” strategy.

Note that this is slightly different from the CharIndices iterator provided by the standard library. Aside from working on possibly invalid UTF-8, this iterator provides both the corresponding starting and ending byte indices of each codepoint yielded. The ending position is necessary to slice the original byte string when invalid UTF-8 bytes are converted into a Unicode replacement codepoint, since a single replacement codepoint can substitute anywhere from 1 to 3 invalid bytes (inclusive).

This iterator is created by the char_indices method provided by the ByteSlice extension trait for &[u8].

Implementations

impl<'a> CharIndices<'a>[src]

pub fn as_bytes(&self) -> &'a [u8]

Notable traits for &'_ [u8]

impl<'_> Read for &'_ [u8]impl<'_> Write for &'_ mut [u8]
[src]

View the underlying data as a subslice of the original data.

The slice returned has the same lifetime as the original slice, and so the iterator can continue to be used while this exists.

Examples

use bstr::ByteSlice;

let mut it = b"abc".char_indices();

assert_eq!(b"abc", it.as_bytes());
it.next();
assert_eq!(b"bc", it.as_bytes());
it.next();
it.next();
assert_eq!(b"", it.as_bytes());

Trait Implementations

impl<'a> Clone for CharIndices<'a>[src]

impl<'a> Debug for CharIndices<'a>[src]

impl<'a> DoubleEndedIterator for CharIndices<'a>[src]

impl<'a> FusedIterator for CharIndices<'a>[src]

impl<'a> Iterator for CharIndices<'a>[src]

type Item = (usize, usize, char)

The type of the elements being iterated over.

Auto Trait Implementations

impl<'a> RefUnwindSafe for CharIndices<'a>

impl<'a> Send for CharIndices<'a>

impl<'a> Sync for CharIndices<'a>

impl<'a> Unpin for CharIndices<'a>

impl<'a> UnwindSafe for CharIndices<'a>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.