diff options
Diffstat (limited to 'src/util/CharUtil.hxx')
-rw-r--r-- | src/util/CharUtil.hxx | 60 |
1 files changed, 44 insertions, 16 deletions
diff --git a/src/util/CharUtil.hxx b/src/util/CharUtil.hxx index dd964f9c3..84a88a94e 100644 --- a/src/util/CharUtil.hxx +++ b/src/util/CharUtil.hxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2013 Max Kellermann <max@duempel.org> + * Copyright (C) 2011-2014 Max Kellermann <max@duempel.org> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -27,75 +27,90 @@ * OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef CHAR_UTIL_HPP -#define CHAR_UTIL_HPP +#ifndef CHAR_UTIL_HXX +#define CHAR_UTIL_HXX constexpr static inline bool IsASCII(const unsigned char ch) { - return ch < 0x80; + return ch < 0x80; } constexpr static inline bool IsASCII(const char ch) { - return IsASCII((unsigned char)ch); + return IsASCII((unsigned char)ch); } +constexpr static inline bool IsWhitespaceOrNull(const char ch) { - return (unsigned char)ch <= 0x20; + return (unsigned char)ch <= 0x20; } +constexpr static inline bool IsWhitespaceNotNull(const char ch) { - return ch > 0 && ch <= 0x20; + return ch > 0 && ch <= 0x20; +} + +/** + * Is the given character whitespace? This calls the faster one of + * IsWhitespaceOrNull() or IsWhitespaceNotNull(). Use this if you + * want the fastest implementation, and you don't care if a null byte + * matches. + */ +constexpr +static inline bool +IsWhitespaceFast(const char ch) +{ + return IsWhitespaceOrNull(ch); } constexpr static inline bool IsPrintableASCII(char ch) { - return (signed char)ch >= 0x20; + return (signed char)ch >= 0x20; } constexpr static inline bool IsDigitASCII(char ch) { - return ch >= '0' && ch <= '9'; + return ch >= '0' && ch <= '9'; } constexpr static inline bool IsUpperAlphaASCII(char ch) { - return ch >= 'A' && ch <= 'Z'; + return ch >= 'A' && ch <= 'Z'; } constexpr static inline bool IsLowerAlphaASCII(char ch) { - return ch >= 'a' && ch <= 'z'; + return ch >= 'a' && ch <= 'z'; } constexpr static inline bool IsAlphaASCII(char ch) { - return IsUpperAlphaASCII(ch) || IsLowerAlphaASCII(ch); + return IsUpperAlphaASCII(ch) || IsLowerAlphaASCII(ch); } constexpr static inline bool IsAlphaNumericASCII(char ch) { - return IsAlphaASCII(ch) || IsDigitASCII(ch); + return IsAlphaASCII(ch) || IsDigitASCII(ch); } /** @@ -106,9 +121,22 @@ constexpr static inline char ToUpperASCII(char ch) { - return ch >= 'a' && ch <= 'z' - ? (ch - ('a' - 'A')) - : ch; + return ch >= 'a' && ch <= 'z' + ? (ch - ('a' - 'A')) + : ch; +} + +/** + * Convert the specified ASCII character (0x00..0x7f) to lower case. + * Unlike toupper(), it ignores the system locale. + */ +constexpr +static inline char +ToLowerASCII(char ch) +{ + return ch >= 'A' && ch <= 'Z' + ? (ch + ('a' - 'A')) + : ch; } #endif |