| 40 | // Helper to read little-endian values from byte buffer |
| 41 | inline uint16_t readU16(const uint8_t* p) { return p[0] | (p[1] << 8); } |
| 42 | inline int16_t readI16(const uint8_t* p) { return static_cast<int16_t>(p[0] | (p[1] << 8)); } |
| 43 | inline uint32_t readU32(const uint8_t* p) { return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); } |
| 44 | |
| 45 | // Walks a null-terminated UTF-8 string and appends each unique codepoint to |