#include #include static inline int leading_ones(uint8_t value) { for (int i=0; i<8; i++) { if (!(value & 0x80)) { return i; } value = value << 1; } assert(false); } static inline uint8_t last_k_bits(uint8_t value, uint8_t bits) { return (value & ((1<= sizeof(CodePoint)/sizeof(char)); size_t i = 0; if (c <= 0x7F) { buffer[i++] = c; } else if (c <= 0x7FF) { buffer[i++] = 0b11000000 | (c >> 6); buffer[i++] = 0b10000000 | (c & 0b111111); } else if (c <= 0xFFFF) { buffer[i++] = 0b11100000 | (c >> 12); buffer[i++] = 0b10000000 | ((c >> 6) & 0b111111); buffer[i++] = 0b10000000 | (c & 0b111111); } else { buffer[i++] = 0b11110000 | (c >> 18); buffer[i++] = 0b10000000 | ((c >> 12) & 0b111111); buffer[i++] = 0b10000000 | ((c >> 6) & 0b111111); buffer[i++] = 0b10000000 | (c & 0b111111); } return i; }