mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-08 19:42:12 +00:00
read_code_num read the leading zeros one read_bit() at a time. It now takes peek(32) and, when the code has fewer than 16 leading zeros and lies wholly inside the data, decodes it from that one word. Longer codes, codes cut off by the end of the data and invalid codes take the previous bit-by-bit loop, moved to a cold function, so errors and the position after an error are unchanged. write_code_num wrote the zero prefix as up to 32 one-bit writes. A code of up to 32 bits is now one write_bits call; longer codes write the zero prefix in one call. Tests compare read_ue, read_se (several codes in a row, every start position, zero runs of 28 to 40 bits, buffers of 0 to 16 bytes) and write_ue with verbatim copies of the previous code, plus the 31/32/33-bit code boundaries and u32::MAX. Closes #517 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>