From 3ede66098fc010499fe1d0d255d4c9767b4df62a Mon Sep 17 00:00:00 2001 From: Martchus Date: Mon, 8 Jun 2015 22:09:09 +0200 Subject: [PATCH] added BitReader class --- io/bitreader.cpp | 37 +++++++++++++++++++++++++++++++++++++ io/bitreader.h | 15 +++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 io/bitreader.cpp create mode 100644 io/bitreader.h diff --git a/io/bitreader.cpp b/io/bitreader.cpp new file mode 100644 index 0000000..a5c9f2c --- /dev/null +++ b/io/bitreader.cpp @@ -0,0 +1,37 @@ +#include "bitreader.h" + +using namespace std; + +namespace IoUtilities { + +/*! + * \class IoUtilities::BitReader + * \brief The BitReader class allows bitwise reading of buffered data. + */ + +/*! + * \brief Skips the specified number of bits without reading it. + * \param Specifies the number of bits to skip. + * \throws Throws ios_base::failure if the end of the buffer is exceeded. + * The reader becomes invalid in that case. + */ +void BitReader::skipBits(std::size_t bitCount) +{ + if(bitCount < m_bitsAvail) { + m_bitsAvail -= bitCount; + if(!m_bitsAvail) { + m_bitsAvail = 8; + if(++m_buffer >= m_end) { + throw ios_base::failure("end of buffer exceeded"); + } + } + } else { + if((m_buffer += (bitCount -= m_bitsAvail) / 8) >= m_end) { + throw ios_base::failure("end of buffer exceeded"); + } + m_bitsAvail = 8 - (bitCount % 8); + } +} + +} // namespace IoUtilities + diff --git a/io/bitreader.h b/io/bitreader.h new file mode 100644 index 0000000..fe42da3 --- /dev/null +++ b/io/bitreader.h @@ -0,0 +1,15 @@ +#ifndef IOUTILITIES_BITREADER_H +#define IOUTILITIES_BITREADER_H + + +namespace IoUtilities { + +class BitReader +{ +public: + BitReader(); +}; + +} // namespace IoUtilities + +#endif // IOUTILITIES_BITREADER_H