[][src]Struct unic_char_range::CharRange

pub struct CharRange {
    pub low: char,
    pub high: char,
}

A range of unicode code points.

The most idiomatic way to construct this range is through the use of the chars! macro:

#[macro_use] extern crate unic_char_range;
use unic_char_range::CharRange;

assert_eq!(chars!('a'..='z'), CharRange::closed('a', 'z'));
assert_eq!(chars!('a'..'z'), CharRange::open_right('a', 'z'));
assert_eq!(chars!(..), CharRange::all());

If constructed in reverse order, such that self.high is ordered before self.low, the range is empty. If you want to iterate in decreasing order, use .iter().rev(). All empty ranges are considered equal no matter the internal state.

Fields

low: char

The lowest character in this range (inclusive).

high: char

The highest character in this range (inclusive).

Methods

impl CharRange[src]

Constructors

pub fn closed(start: char, stop: char) -> CharRange[src]

Construct a closed range of characters.

If stop is ordered before start, the resulting range will be empty.

Example

assert_eq!(
    CharRange::closed('a', 'd').iter().collect::<Vec<_>>(),
    vec!['a', 'b', 'c', 'd']
)

pub fn open_right(start: char, stop: char) -> CharRange[src]

Construct a half open (right) range of characters.

Example

assert_eq!(
    CharRange::open_right('a', 'd').iter().collect::<Vec<_>>(),
    vec!['a', 'b', 'c']
)

pub fn open_left(start: char, stop: char) -> CharRange[src]

Construct a half open (left) range of characters.

Example

assert_eq!(
    CharRange::open_left('a', 'd').iter().collect::<Vec<_>>(),
    vec!['b', 'c', 'd']
)

pub fn open(start: char, stop: char) -> CharRange[src]

Construct a fully open range of characters.

Example

assert_eq!(
    CharRange::open('a', 'd').iter().collect::<Vec<_>>(),
    vec!['b', 'c']
)

pub fn all() -> CharRange[src]

Construct a range over all characters.

impl CharRange[src]

Collection-like fn

pub fn contains(&self, ch: char) -> bool[src]

Does this range include a character?

Examples

assert!(   CharRange::closed('a', 'g').contains('d'));
assert!( ! CharRange::closed('a', 'g').contains('z'));

assert!( ! CharRange:: open ('a', 'a').contains('a'));
assert!( ! CharRange::closed('z', 'a').contains('g'));

pub fn cmp(&self, ch: char) -> Ordering[src]

Determine the ordering of this range and a character.

Panics

Panics if the range is empty. This fn may be adjusted in the future to not panic in optimized builds. Even if so, an empty range will never compare as Ordering::Equal.

pub fn len(&self) -> usize[src]

How many characters are in this range?

pub fn is_empty(&self) -> bool[src]

Is this range empty?

pub fn iter(&self) -> CharIter[src]

Create an iterator over this range.

Trait Implementations

impl Clone for CharRange[src]

impl Copy for CharRange[src]

impl Debug for CharRange[src]

impl Eq for CharRange[src]

impl From<CharIter> for CharRange[src]

impl From<CharRange> for CharIter[src]

impl IntoIterator for CharRange[src]

type Item = char

The type of the elements being iterated over.

type IntoIter = CharIter

Which kind of iterator are we turning this into?

impl PartialEq<CharRange> for CharRange[src]

impl StructuralEq for CharRange[src]

Auto Trait Implementations

impl Send for CharRange

impl Sync for CharRange

impl Unpin for CharRange

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, 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.