type: Make an assert()ion independent of the last entry of an enum.
[cparser] / string_rep.c
1 /*
2  * This file is part of cparser.
3  * Copyright (C) 2012 Matthias Braun <matze@braunis.de>
4  */
5 #include "adt/error.h"
6 #include "string_rep.h"
7
8 static inline size_t wstrlen(const string_t *string)
9 {
10         size_t      result = 0;
11         const char *p      = string->begin;
12         const char *end    = p + string->size;
13         while (p < end) {
14                 read_utf8_char(&p);
15                 ++result;
16         }
17         return result;
18 }
19
20 size_t get_string_len(string_t const *const str)
21 {
22         switch (str->encoding) {
23         case STRING_ENCODING_CHAR:
24         case STRING_ENCODING_UTF8:   return str->size;
25         case STRING_ENCODING_CHAR16:
26         case STRING_ENCODING_CHAR32:
27         case STRING_ENCODING_WIDE:   return wstrlen(str);
28         }
29         panic("invalid string encoding");
30 }