aboutsummaryrefslogtreecommitdiffstats
path: root/src/serd_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/serd_internal.h')
-rw-r--r--src/serd_internal.h43
1 files changed, 21 insertions, 22 deletions
diff --git a/src/serd_internal.h b/src/serd_internal.h
index 1b601e12..7adf1567 100644
--- a/src/serd_internal.h
+++ b/src/serd_internal.h
@@ -99,27 +99,26 @@ is_digit(const uint8_t c)
return in_range(c, '0', '9');
}
-/** Measured UTF-8 string. */
-typedef struct {
- size_t n_bytes; ///< Size in bytes including trailing null byte
- size_t n_chars; ///< Length in characters
- uint8_t buf[]; ///< Buffer
-} SerdString;
-
-#if 0
-/** Create a new UTF-8 string from @a utf8. */
-SerdString*
-serd_string_new(const uint8_t* utf8);
-
-/** Copy @a string. */
-SerdString*
-serd_string_copy(const SerdString* str);
-#endif
-
-void
-serd_string_free(SerdString* str);
-
-SerdString*
-serd_string_new_from_node(const SerdNode* node);
+/** UTF-8 strlen.
+ * @return Lengh of @a utf8 in characters.
+ * @param utf8 A null-terminated UTF-8 string.
+ * @param out_n_bytes (Output) Set to the size of @a utf8 in bytes.
+ */
+static inline size_t
+serd_strlen(const uint8_t* utf8, size_t* out_n_bytes)
+{
+ size_t n_chars = 0;
+ size_t i = 0;
+ for (; utf8[i]; ++i) {
+ if ((utf8[i] & 0xC0) != 0x80) {
+ // Does not start with `10', start of a new character
+ ++n_chars;
+ }
+ }
+ if (out_n_bytes) {
+ *out_n_bytes = i + 1;
+ }
+ return n_chars;
+}
#endif // SERD_INTERNAL_H