From 9c29938c172e2423f67925274a18b4f1c1bb42cf Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 9 Jul 2017 20:09:36 +0200 Subject: Factor out UTF-8 character size counting --- src/writer.c | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) (limited to 'src/writer.c') diff --git a/src/writer.c b/src/writer.c index 63b8d5af..c293b4f8 100644 --- a/src/writer.c +++ b/src/writer.c @@ -158,33 +158,11 @@ sink(const void* buf, size_t len, SerdWriter* writer) return serd_byte_sink_write(buf, len, &writer->byte_sink); } -// Return the number of bytes in a UTF-8 character -static inline uint32_t -utf8_num_bytes(const uint8_t* utf8) -{ - if ((utf8[0] & 0x80) == 0) { // Starts with `0' - return 1; - } - -#ifdef HAVE_BUILTIN_CLZ - return __builtin_clz(~utf8[0] << 24); -#else - if ((utf8[0] & 0xE0) == 0xC0) { // Starts with `110' - return 2; - } else if ((utf8[0] & 0xF0) == 0xE0) { // Starts with `1110' - return 3; - } else if ((utf8[0] & 0xF8) == 0xF0) { // Starts with `11110' - return 4; - } - return 0; -#endif -} - // Parse a UTF-8 character, set *size to the length, and return the code point static inline uint32_t parse_utf8_char(SerdWriter* writer, const uint8_t* utf8, size_t* size) { - switch (*size = utf8_num_bytes(utf8)) { + switch (*size = utf8_num_bytes(utf8[0])) { case 1: case 2: case 3: case 4: break; default: -- cgit v1.2.1