Add BinaryReader::readRemainingBytes()
This commit is contained in:
parent
2cdde81077
commit
9a95db3773
|
@ -112,8 +112,8 @@ set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}")
|
||||||
set(META_APP_DESCRIPTION "Useful C++ classes and routines such as argument parser, IO and conversion utilities")
|
set(META_APP_DESCRIPTION "Useful C++ classes and routines such as argument parser, IO and conversion utilities")
|
||||||
set(META_FEATURES_FOR_COMPILER_DETECTION_HEADER cxx_thread_local)
|
set(META_FEATURES_FOR_COMPILER_DETECTION_HEADER cxx_thread_local)
|
||||||
set(META_VERSION_MAJOR 5)
|
set(META_VERSION_MAJOR 5)
|
||||||
set(META_VERSION_MINOR 0)
|
set(META_VERSION_MINOR 1)
|
||||||
set(META_VERSION_PATCH 2)
|
set(META_VERSION_PATCH 0)
|
||||||
|
|
||||||
# find required 3rd party libraries
|
# find required 3rd party libraries
|
||||||
include(3rdParty)
|
include(3rdParty)
|
||||||
|
|
|
@ -44,10 +44,9 @@ void BinaryReader::setStream(istream *stream, bool giveOwnership)
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Returns the size of the assigned stream.
|
* \brief Returns the size of the assigned stream.
|
||||||
*
|
* \remarks
|
||||||
* The size is determined by seeking to the end of the stream and returning this offset.
|
* - The size is determined by seeking to the end of the stream and returning this offset.
|
||||||
*
|
* - The method will seek back to the previous offset before returning.
|
||||||
* \remarks The method will seek back to the previous offset before returning.
|
|
||||||
*/
|
*/
|
||||||
istream::pos_type BinaryReader::readStreamsize()
|
istream::pos_type BinaryReader::readStreamsize()
|
||||||
{
|
{
|
||||||
|
@ -58,6 +57,21 @@ istream::pos_type BinaryReader::readStreamsize()
|
||||||
return streamsize;
|
return streamsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the number of remaining bytes in the stream from the current offset.
|
||||||
|
* \remarks
|
||||||
|
* - This is achieved by seeking to the end of the stream.
|
||||||
|
* - The method will seek back to the previous offset before returning.
|
||||||
|
*/
|
||||||
|
istream::pos_type BinaryReader::readRemainingBytes()
|
||||||
|
{
|
||||||
|
istream::pos_type cp = m_stream->tellg();
|
||||||
|
m_stream->seekg(0, ios_base::end);
|
||||||
|
const auto streamsize = m_stream->tellg();
|
||||||
|
m_stream->seekg(cp);
|
||||||
|
return streamsize - cp;
|
||||||
|
}
|
||||||
|
|
||||||
void BinaryReader::bufferVariableLengthInteger()
|
void BinaryReader::bufferVariableLengthInteger()
|
||||||
{
|
{
|
||||||
static constexpr int maxPrefixLength = 8;
|
static constexpr int maxPrefixLength = 8;
|
||||||
|
|
|
@ -26,6 +26,7 @@ public:
|
||||||
bool eof() const;
|
bool eof() const;
|
||||||
bool canRead() const;
|
bool canRead() const;
|
||||||
std::istream::pos_type readStreamsize();
|
std::istream::pos_type readStreamsize();
|
||||||
|
std::istream::pos_type readRemainingBytes();
|
||||||
void read(char *buffer, std::streamsize length);
|
void read(char *buffer, std::streamsize length);
|
||||||
void read(std::uint8_t *buffer, std::streamsize length);
|
void read(std::uint8_t *buffer, std::streamsize length);
|
||||||
void read(std::vector<char> &buffer, std::streamsize length);
|
void read(std::vector<char> &buffer, std::streamsize length);
|
||||||
|
|
|
@ -92,6 +92,7 @@ void IoTests::testBinaryReader()
|
||||||
BinaryReader reader(&testFile);
|
BinaryReader reader(&testFile);
|
||||||
CPPUNIT_ASSERT_EQUAL(reader.readStreamsize(), static_cast<istream::pos_type>(398));
|
CPPUNIT_ASSERT_EQUAL(reader.readStreamsize(), static_cast<istream::pos_type>(398));
|
||||||
CPPUNIT_ASSERT(reader.readUInt16LE() == 0x0102u);
|
CPPUNIT_ASSERT(reader.readUInt16LE() == 0x0102u);
|
||||||
|
CPPUNIT_ASSERT_EQUAL(reader.readRemainingBytes(), static_cast<istream::pos_type>(396));
|
||||||
CPPUNIT_ASSERT(reader.readUInt16BE() == 0x0102u);
|
CPPUNIT_ASSERT(reader.readUInt16BE() == 0x0102u);
|
||||||
CPPUNIT_ASSERT(reader.readUInt24LE() == 0x010203u);
|
CPPUNIT_ASSERT(reader.readUInt24LE() == 0x010203u);
|
||||||
CPPUNIT_ASSERT(reader.readUInt24BE() == 0x010203u);
|
CPPUNIT_ASSERT(reader.readUInt24BE() == 0x010203u);
|
||||||
|
|
Loading…
Reference in New Issue