author | Masatoshi Kimura <VYV03354@nifty.ne.jp> |
Tue, 27 Mar 2018 23:59:55 +0900 | |
changeset 410716 | 89678976aa895c43739b2abc9e3fff0940eb4cde |
parent 410715 | d964f93d4fb2e549b5d267fa720e4585d54a5d0b |
child 410717 | 577c204175529bf4f23c7736bd67552b393dcc27 |
push id | 33735 |
push user | shindli@mozilla.com |
push date | Fri, 30 Mar 2018 09:55:46 +0000 |
treeherder | mozilla-central@3f37287132bf [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | froydnj |
bugs | 1449082 |
milestone | 61.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
xpcom/base/nsCRTGlue.cpp | file | annotate | diff | comparison | revisions | |
xpcom/base/nsCRTGlue.h | file | annotate | diff | comparison | revisions |
--- a/xpcom/base/nsCRTGlue.cpp +++ b/xpcom/base/nsCRTGlue.cpp @@ -212,22 +212,16 @@ NS_IsUpper(char aChar) bool NS_IsLower(char aChar) { return aChar != (char)nsLowerUpperUtils::kLower2Upper[(unsigned char)aChar]; } bool -NS_IsAscii(char16_t aChar) -{ - return (0x0080 > aChar); -} - -bool NS_IsAscii(const char16_t* aString) { while (*aString) { if (0x0080 <= *aString) { return false; } aString++; } @@ -254,38 +248,16 @@ NS_IsAscii(const char* aString, uint32_t if (0x80 & *aString) { return false; } ++aString; } return true; } -bool -NS_IsAsciiAlpha(char16_t aChar) -{ - return (aChar >= 'A' && aChar <= 'Z') || - (aChar >= 'a' && aChar <= 'z'); -} - -bool -NS_IsAsciiWhitespace(char16_t aChar) -{ - return aChar == ' ' || - aChar == '\r' || - aChar == '\n' || - aChar == '\t'; -} - -bool -NS_IsAsciiDigit(char16_t aChar) -{ - return aChar >= '0' && aChar <= '9'; -} - #ifndef XPCOM_GLUE_AVOID_NSPR void NS_MakeRandomString(char* aBuf, int32_t aBufLen) { #define TABLE_SIZE 36 static const char table[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
--- a/xpcom/base/nsCRTGlue.h +++ b/xpcom/base/nsCRTGlue.h @@ -93,24 +93,74 @@ inline char NS_ToLower(char aChar) { return (char)nsLowerUpperUtils::kUpper2Lower[(unsigned char)aChar]; } bool NS_IsUpper(char aChar); bool NS_IsLower(char aChar); -bool NS_IsAscii(char16_t aChar); +constexpr bool +NS_IsAscii(char16_t aChar) +{ + return (0x0080 > aChar); +} + bool NS_IsAscii(const char16_t* aString); -bool NS_IsAsciiAlpha(char16_t aChar); -bool NS_IsAsciiDigit(char16_t aChar); -bool NS_IsAsciiWhitespace(char16_t aChar); bool NS_IsAscii(const char* aString); bool NS_IsAscii(const char* aString, uint32_t aLength); +// These three functions are `constexpr` alternatives to NS_IsAscii. It should +// only be used for compile-time computation because it uses recursion. +// XXX: once support for GCC 4.9 is dropped, this function should be removed +// and NS_IsAscii should be made `constexpr`. +constexpr bool +NS_ConstExprIsAscii(const char16_t* aString) +{ + return !*aString ? true : + !NS_IsAscii(*aString) ? false : NS_ConstExprIsAscii(aString + 1); +} + +constexpr bool +NS_ConstExprIsAscii(const char* aString) +{ + return !*aString ? true : + !NS_IsAscii(*aString) ? false : NS_ConstExprIsAscii(aString + 1); +} + +constexpr bool +NS_ConstExprIsAscii(const char* aString, uint32_t aLength) +{ + return aLength == 0 ? true : + !NS_IsAscii(*aString) ? false : + NS_ConstExprIsAscii(aString + 1, aLength - 1); +} + +constexpr bool +NS_IsAsciiAlpha(char16_t aChar) +{ + return (aChar >= 'A' && aChar <= 'Z') || + (aChar >= 'a' && aChar <= 'z'); +} + +constexpr bool +NS_IsAsciiWhitespace(char16_t aChar) +{ + return aChar == ' ' || + aChar == '\r' || + aChar == '\n' || + aChar == '\t'; +} + +constexpr bool +NS_IsAsciiDigit(char16_t aChar) +{ + return aChar >= '0' && aChar <= '9'; +} + #ifndef XPCOM_GLUE_AVOID_NSPR void NS_MakeRandomString(char* aBuf, int32_t aBufLen); #endif #define FF '\f' #define TAB '\t' #define CRSTR "\015"