diff --git a/io/bitreader.h b/io/bitreader.h index 0b15c40..3ae55e8 100644 --- a/io/bitreader.h +++ b/io/bitreader.h @@ -6,6 +6,8 @@ #include +#include + namespace IoUtilities { class LIB_EXPORT BitReader @@ -28,17 +30,19 @@ private: /*! * \brief Constructs a new BitReader. - * \remarks Does not take ownership over the specified \a buffer. + * \remarks + * - Does not take ownership over the specified \a buffer. + * - bufferSize must be equal or greather than 1. */ inline BitReader::BitReader(const char *buffer, std::size_t bufferSize) : - m_buffer(reinterpret_cast(buffer)), - m_end(reinterpret_cast(buffer + bufferSize)), - m_bitsAvail(8) + BitReader(buffer, buffer + bufferSize) {} /*! * \brief Constructs a new BitReader. - * \remarks Does not take ownership over the specified \a buffer. + * \remarks + * - Does not take ownership over the specified \a buffer. + * - \a end must be greather than \a buffer. */ inline BitReader::BitReader(const char *buffer, const char *end) : m_buffer(reinterpret_cast(buffer)), @@ -59,14 +63,14 @@ intType BitReader::readBits(byte bitCount) { intType val = 0; for(byte readAtOnce; bitCount; bitCount -= readAtOnce) { - readAtOnce = std::min(bitCount, m_bitsAvail); - val = (val << readAtOnce) | (((*m_buffer) >> (m_bitsAvail -= readAtOnce)) & (0xFF >> (0x08 - readAtOnce))); if(!m_bitsAvail) { m_bitsAvail = 8; if(++m_buffer >= m_end) { throw std::ios_base::failure("end of buffer exceeded"); } } + readAtOnce = std::min(bitCount, m_bitsAvail); + val = (val << readAtOnce) | (((*m_buffer) >> (m_bitsAvail -= readAtOnce)) & (0xFF >> (0x08 - readAtOnce))); } return val; }