See ensureBits documentation above. This one ensures up to 32 bits */
| 545 | |
| 546 | /*See ensureBits documentation above. This one ensures up to 32 bits */ |
| 547 | static LODEPNG_INLINE unsigned ensureBits32(LodePNGBitReader* reader, size_t nbits) { |
| 548 | size_t start = reader->bp >> 3u; |
| 549 | size_t size = reader->size; |
| 550 | if(start + 4u < size) { |
| 551 | reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u) | |
| 552 | ((unsigned)reader->data[start + 2] << 16u) | ((unsigned)reader->data[start + 3] << 24u); |
| 553 | reader->buffer >>= (reader->bp & 7u); |
| 554 | reader->buffer |= (((unsigned)reader->data[start + 4] << 24u) << (8u - (reader->bp & 7u))); |
| 555 | return 1; |
| 556 | } else { |
| 557 | reader->buffer = 0; |
| 558 | if(start + 0u < size) reader->buffer |= reader->data[start + 0]; |
| 559 | if(start + 1u < size) reader->buffer |= ((unsigned)reader->data[start + 1] << 8u); |
| 560 | if(start + 2u < size) reader->buffer |= ((unsigned)reader->data[start + 2] << 16u); |
| 561 | if(start + 3u < size) reader->buffer |= ((unsigned)reader->data[start + 3] << 24u); |
| 562 | reader->buffer >>= (reader->bp & 7u); |
| 563 | return reader->bp + nbits <= reader->bitsize; |
| 564 | } |
| 565 | } |
| 566 | |
| 567 | /* Get bits without advancing the bit pointer. Must have enough bits available with ensureBits. Max nbits is 31. */ |
| 568 | static unsigned peekBits(LodePNGBitReader* reader, size_t nbits) { |
no outgoing calls
no test coverage detected