diff --git a/src/gmio_core/internal/string_utils.h b/src/gmio_core/internal/string_utils.h index 01663d7..0b40e35 100644 --- a/src/gmio_core/internal/string_utils.h +++ b/src/gmio_core/internal/string_utils.h @@ -21,6 +21,7 @@ /*! Returns non-zero if \p c is a space (for C-locale), zero otherwise */ GMIO_INLINE int gmio_clocale_isspace(char c) { +#if 0 return c == 0x20 /* space (SPC) */ || c == 0x09 /* horizontal tab (TAB) */ || c == 0x0a /* newline (LF) */ @@ -28,6 +29,28 @@ GMIO_INLINE int gmio_clocale_isspace(char c) || c == 0x0c /* feed (FF) */ || c == 0x0d /* carriage return (CR) */ ; + /* return c == 0x20 || ((uint8_t)(c - 0x09) < 5); */ +#else + static const unsigned char space_chars[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + return space_chars[c]; +#endif } /*! Returns true if \p c1 compare equals to \p c2 diff --git a/tests/test_internal.c b/tests/test_internal.c index 893165d..f5d2518 100644 --- a/tests/test_internal.c +++ b/tests/test_internal.c @@ -23,6 +23,7 @@ #include "../src/gmio_core/internal/fast_atof.h" #include "../src/gmio_core/internal/safe_cast.h" #include "../src/gmio_core/internal/string_parse.h" +#include "../src/gmio_core/internal/string_utils.h" #include "stream_buffer.h" #include "utils.h" @@ -202,6 +203,17 @@ const char* test_internal__string_parse() return NULL; } +const char* test_internal__string_utils() +{ + UTEST_ASSERT(gmio_clocale_isspace(' ')); + UTEST_ASSERT(gmio_clocale_isspace('\t')); + UTEST_ASSERT(gmio_clocale_isspace('\n')); + UTEST_ASSERT(gmio_clocale_isspace('\r')); + UTEST_ASSERT(!gmio_clocale_isspace('a')); + UTEST_ASSERT(!gmio_clocale_isspace('A')); + return NULL; +} + const char* all_tests() { UTEST_SUITE_START(); @@ -210,6 +222,7 @@ const char* all_tests() UTEST_RUN(test_internal__fast_atof); UTEST_RUN(test_internal__safe_cast); UTEST_RUN(test_internal__string_parse); + UTEST_RUN(test_internal__string_utils); return NULL; }