GuUCS gu_char_ucs(char c) { gu_require(gu_char_is_valid(c)); GuUCS u = (GuUCS) c; gu_ensure(u < 0x80); return u; }
char gu_ucs_char(GuUCS uc, GuExn* err) { if (0 <= uc && uc <= 127) { char c = (char) uc; if (gu_char_is_valid(c)) { return c; } } gu_raise(err, GuUCSExn); return 0; }
GuUCS gu_char_ucs(char c) { gu_require(gu_char_is_valid(c)); #ifdef CHAR_ASCII GuUCS u = (GuUCS) c; #else extern const uint8_t gu_ucs_ascii_reverse_[CHAR_MAX]; GuUCS u = gu_ucs_ascii_reverse_[(unsigned char) c]; #endif gu_ensure(u < 0x80); return u; }
size_t gu_str_to_ucs(const char* cbuf, size_t len, GuUCS* ubuf, GuExn* err) { size_t n = 0; while (n < len) { char c = cbuf[n]; if (!gu_char_is_valid(c)) { gu_raise(err, GuUCSExn); return n; } ubuf[n] = gu_char_ucs(c); n++; } return n; }