Skip to content

Commit

Permalink
libunicode: optimize char functions for ascii characters
Browse files Browse the repository at this point in the history
  • Loading branch information
Swatinem committed Aug 23, 2014
1 parent c509f79 commit cb29492
Showing 1 changed file with 33 additions and 10 deletions.
43 changes: 33 additions & 10 deletions src/libunicode/u_char.rs
Expand Up @@ -20,7 +20,13 @@ use tables::{derived_property, property, general_category, conversions, charwidt

/// Returns whether the specified `char` is considered a Unicode alphabetic
/// code point
pub fn is_alphabetic(c: char) -> bool { derived_property::Alphabetic(c) }
pub fn is_alphabetic(c: char) -> bool {
match c {
'a' .. 'z' | 'A' .. 'Z' => true,
c if c > '\x7f' => derived_property::Alphabetic(c),
_ => false
}
}

/// Returns whether the specified `char` satisfies the 'XID_Start' Unicode property
///
Expand All @@ -44,15 +50,27 @@ pub fn is_XID_continue(c: char) -> bool { derived_property::XID_Continue(c) }
/// This is defined according to the terms of the Unicode Derived Core Property 'Lowercase'.
///
#[inline]
pub fn is_lowercase(c: char) -> bool { derived_property::Lowercase(c) }
pub fn is_lowercase(c: char) -> bool {
match c {
'a' .. 'z' => true,
c if c > '\x7f' => derived_property::Lowercase(c),
_ => false
}
}

///
/// Indicates whether a `char` is in upper case
///
/// This is defined according to the terms of the Unicode Derived Core Property 'Uppercase'.
///
#[inline]
pub fn is_uppercase(c: char) -> bool { derived_property::Uppercase(c) }
pub fn is_uppercase(c: char) -> bool {
match c {
'A' .. 'Z' => true,
c if c > '\x7f' => derived_property::Uppercase(c),
_ => false
}
}

///
/// Indicates whether a `char` is whitespace
Expand All @@ -61,10 +79,11 @@ pub fn is_uppercase(c: char) -> bool { derived_property::Uppercase(c) }
///
#[inline]
pub fn is_whitespace(c: char) -> bool {
// As an optimization ASCII whitespace characters are checked separately
c == ' '
|| ('\x09' <= c && c <= '\x0d')
|| property::White_Space(c)
match c {
' ' | '\x09' .. '\x0d' => true,
c if c > '\x7f' => property::White_Space(c),
_ => false
}
}

///
Expand All @@ -75,8 +94,8 @@ pub fn is_whitespace(c: char) -> bool {
///
#[inline]
pub fn is_alphanumeric(c: char) -> bool {
derived_property::Alphabetic(c)
|| general_category::N(c)
is_alphabetic(c)
|| is_digit(c)
}

///
Expand All @@ -91,7 +110,11 @@ pub fn is_control(c: char) -> bool { general_category::Cc(c) }
/// Indicates whether the `char` is numeric (Nd, Nl, or No)
#[inline]
pub fn is_digit(c: char) -> bool {
general_category::N(c)
match c {
'0' .. '9' => true,
c if c > '\x7f' => general_category::N(c),
_ => false
}
}

/// Convert a char to its uppercase equivalent
Expand Down

5 comments on commit cb29492

@bors
Copy link
Contributor

@bors bors commented on cb29492 Aug 23, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from alexcrichton
at Swatinem@cb29492

@bors
Copy link
Contributor

@bors bors commented on cb29492 Aug 23, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging Swatinem/rust/charascii = cb29492 into auto

@bors
Copy link
Contributor

@bors bors commented on cb29492 Aug 23, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Swatinem/rust/charascii = cb29492 merged ok, testing candidate = 1153ad3

@bors
Copy link
Contributor

@bors bors commented on cb29492 Aug 23, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = 1153ad3

Please sign in to comment.