noexcept the ctype funcs

master
Daniel Kolesa 2018-01-03 02:12:23 +01:00
parent ad149ff0f6
commit fd4b26046c
3 changed files with 47 additions and 47 deletions

View File

@ -278,7 +278,7 @@ struct parse_state {
code_vec const &singles code_vec const &singles
) { ) {
format( format(
writer, "%s %s%s(char32_t c) {\n", ret_type, prefix, fname writer, "%s %s%s(char32_t c) noexcept {\n", ret_type, prefix, fname
); );
format(writer, " return utf::uctype_func<\n"); format(writer, " return utf::uctype_func<\n");
auto it1 = { &ranges, &laces1, &laces2, &singles }; auto it1 = { &ranges, &laces1, &laces2, &singles };

View File

@ -888,22 +888,22 @@ namespace utf {
return detail::codepoint_range<char32_t>{r}; return detail::codepoint_range<char32_t>{r};
} }
bool isalnum(char32_t c); bool isalnum(char32_t c) noexcept;
bool isalpha(char32_t c); bool isalpha(char32_t c) noexcept;
bool isblank(char32_t c); bool isblank(char32_t c) noexcept;
bool iscntrl(char32_t c); bool iscntrl(char32_t c) noexcept;
bool isdigit(char32_t c); bool isdigit(char32_t c) noexcept;
bool isgraph(char32_t c); bool isgraph(char32_t c) noexcept;
bool islower(char32_t c); bool islower(char32_t c) noexcept;
bool isprint(char32_t c); bool isprint(char32_t c) noexcept;
bool ispunct(char32_t c); bool ispunct(char32_t c) noexcept;
bool isspace(char32_t c); bool isspace(char32_t c) noexcept;
bool istitle(char32_t c); bool istitle(char32_t c) noexcept;
bool isupper(char32_t c); bool isupper(char32_t c) noexcept;
bool isvalid(char32_t c); bool isvalid(char32_t c) noexcept;
bool isxdigit(char32_t c); bool isxdigit(char32_t c) noexcept;
char32_t tolower(char32_t c); char32_t tolower(char32_t c) noexcept;
char32_t toupper(char32_t c); char32_t toupper(char32_t c) noexcept;
inline int compare(string_range s1, string_range s2) noexcept { inline int compare(string_range s1, string_range s2) noexcept {
return s1.compare(s2); return s1.compare(s2);

View File

@ -119,19 +119,19 @@ std::size_t length(string_range r, string_range &cont) noexcept {
* the other ones use custom tables for lookups * the other ones use custom tables for lookups
*/ */
bool isalnum(char32_t c) { bool isalnum(char32_t c) noexcept {
return (utf::isalpha(c) || utf::isdigit(c)); return (utf::isalpha(c) || utf::isdigit(c));
} }
bool isblank(char32_t c) { bool isblank(char32_t c) noexcept {
return ((c == ' ') || (c == '\t')); return ((c == ' ') || (c == '\t'));
} }
bool isgraph(char32_t c) { bool isgraph(char32_t c) noexcept {
return (!utf::isspace(c) && utf::isprint(c)); return (!utf::isspace(c) && utf::isprint(c));
} }
bool isprint(char32_t c) { bool isprint(char32_t c) noexcept {
switch (std::uint32_t(c)) { switch (std::uint32_t(c)) {
case 0x2028: case 0x2028:
case 0x2029: case 0x2029:
@ -144,11 +144,11 @@ bool isprint(char32_t c) {
} }
} }
bool ispunct(char32_t c) { bool ispunct(char32_t c) noexcept {
return (utf::isgraph(c) && !utf::isalnum(c)); return (utf::isgraph(c) && !utf::isalnum(c));
} }
bool isvalid(char32_t c) { bool isvalid(char32_t c) noexcept {
/* surrogate code points */ /* surrogate code points */
if ((c >= 0xD800) && (c <= 0xDFFF)) { if ((c >= 0xD800) && (c <= 0xDFFF)) {
return false; return false;
@ -165,7 +165,7 @@ bool isvalid(char32_t c) {
return (c <= MaxCodepoint); return (c <= MaxCodepoint);
} }
bool isxdigit(char32_t c) { bool isxdigit(char32_t c) noexcept {
if ((c >= '0') && (c <= '9')) { if ((c >= '0') && (c <= '9')) {
return true; return true;
} }
@ -173,13 +173,13 @@ bool isxdigit(char32_t c) {
return ((uc >= 'a') && (uc <= 'f')); return ((uc >= 'a') && (uc <= 'f'));
} }
inline int codepoint_cmp1(void const *a, void const *b) { inline int codepoint_cmp1(void const *a, void const *b) noexcept {
char32_t c1 = *static_cast<char32_t const *>(a); char32_t c1 = *static_cast<char32_t const *>(a);
char32_t c2 = *static_cast<char32_t const *>(b); char32_t c2 = *static_cast<char32_t const *>(b);
return (c1 - c2); return (c1 - c2);
} }
inline int codepoint_cmp2(void const *a, void const *b) { inline int codepoint_cmp2(void const *a, void const *b) noexcept {
char32_t c = *static_cast<char32_t const *>(a); char32_t c = *static_cast<char32_t const *>(a);
char32_t const *p = static_cast<char32_t const *>(b); char32_t const *p = static_cast<char32_t const *>(b);
if ((c >= p[0]) && (c <= p[1])) { if ((c >= p[0]) && (c <= p[1])) {
@ -198,7 +198,7 @@ struct uctype_func {
template<std::size_t N, std::size_t S> template<std::size_t N, std::size_t S>
static char32_t *search( static char32_t *search(
char32_t c, void const *arr, int (*cmp)(void const *, void const *) char32_t c, void const *arr, int (*cmp)(void const *, void const *)
) { ) noexcept {
return static_cast<char32_t *>(std::bsearch(&c, arr, N / S, S, cmp)); return static_cast<char32_t *>(std::bsearch(&c, arr, N / S, S, cmp));
} }
@ -208,7 +208,7 @@ struct uctype_func {
void const *laces1 [[maybe_unused]], void const *laces1 [[maybe_unused]],
void const *laces2 [[maybe_unused]], void const *laces2 [[maybe_unused]],
void const *singles [[maybe_unused]] void const *singles [[maybe_unused]]
) { ) noexcept {
if constexpr(RN != 0) { if constexpr(RN != 0) {
char32_t *found = search<RN, RS>(c, ranges, codepoint_cmp2); char32_t *found = search<RN, RS>(c, ranges, codepoint_cmp2);
if (found) { if (found) {
@ -242,7 +242,7 @@ struct uctype_func {
void const *laces1 [[maybe_unused]], void const *laces1 [[maybe_unused]],
void const *laces2 [[maybe_unused]], void const *laces2 [[maybe_unused]],
void const *singles [[maybe_unused]] void const *singles [[maybe_unused]]
) { ) noexcept {
if constexpr(RN != 0) { if constexpr(RN != 0) {
char32_t *found = search<RN, RS>(c, ranges, codepoint_cmp2); char32_t *found = search<RN, RS>(c, ranges, codepoint_cmp2);
if (found) { if (found) {
@ -278,15 +278,15 @@ struct uctype_func {
}; };
/* these are geneated */ /* these are geneated */
bool isalpha(char32_t c); bool isalpha(char32_t c) noexcept;
bool iscntrl(char32_t c); bool iscntrl(char32_t c) noexcept;
bool isdigit(char32_t c); bool isdigit(char32_t c) noexcept;
bool islower(char32_t c); bool islower(char32_t c) noexcept;
bool isspace(char32_t c); bool isspace(char32_t c) noexcept;
bool istitle(char32_t c); bool istitle(char32_t c) noexcept;
bool isupper(char32_t c); bool isupper(char32_t c) noexcept;
char32_t tolower(char32_t c); char32_t tolower(char32_t c) noexcept;
char32_t toupper(char32_t c); char32_t toupper(char32_t c) noexcept;
#if __has_include("string_utf.hh") #if __has_include("string_utf.hh")
#include "string_utf.hh" #include "string_utf.hh"
@ -296,42 +296,42 @@ char32_t toupper(char32_t c);
* is generated during build) by providing a bunch of ASCII only fallbacks * is generated during build) by providing a bunch of ASCII only fallbacks
*/ */
bool isalpha(char32_t c) { bool isalpha(char32_t c) noexcept {
return (utf::isupper(c) || utf::islower(c)); return (utf::isupper(c) || utf::islower(c));
} }
bool iscntrl(char32_t c) { bool iscntrl(char32_t c) noexcept {
return ((c <= 0x1F) || (c == 0x7F)); return ((c <= 0x1F) || (c == 0x7F));
} }
bool isdigit(char32_t c) { bool isdigit(char32_t c) noexcept {
return ((c >= '0') && (c <= '9')); return ((c >= '0') && (c <= '9'));
} }
bool islower(char32_t c) { bool islower(char32_t c) noexcept {
return ((c >= 'a') && (c <= 'z')); return ((c >= 'a') && (c <= 'z'));
} }
bool isspace(char32_t c) { bool isspace(char32_t c) noexcept {
return ((c == ' ') || ((c >= 0x09) && (c <= 0x0D))); return ((c == ' ') || ((c >= 0x09) && (c <= 0x0D)));
} }
bool istitle(char32_t) { bool istitle(char32_t) noexcept {
return false; return false;
} }
bool isupper(char32_t c) { bool isupper(char32_t c) noexcept {
return ((c >= 'A') && (c <= 'Z')); return ((c >= 'A') && (c <= 'Z'));
} }
char32_t tolower(char32_t c) { char32_t tolower(char32_t c) noexcept {
if (utf::isupper(c)) { if (utf::isupper(c)) {
return c | 32; return c | 32;
} }
return c; return c;
} }
char32_t toupper(char32_t c) { char32_t toupper(char32_t c) noexcept {
if (utf::islower(c)) { if (utf::islower(c)) {
return c ^ 32; return c ^ 32;
} }