aboutsummaryrefslogtreecommitdiffstats
path: root/src/util/CharUtil.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/CharUtil.hxx')
-rw-r--r--src/util/CharUtil.hxx60
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