Skip to content

Commit

Permalink
[#70] Fix C++ BitBuffer if underlying buffer is empty
Browse files Browse the repository at this point in the history
  • Loading branch information
mikir committed Nov 22, 2019
1 parent cfd8fca commit f174603
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
10 changes: 5 additions & 5 deletions compiler/extensions/cpp/runtime/src/zserio/BitBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ BitBuffer::BitBuffer(size_t bitSize) : m_buffer((bitSize + 7) / 8), m_bitSize(bi
}

BitBuffer::BitBuffer(const std::vector<uint8_t>& buffer) :
BitBuffer(buffer, 8 * buffer.size())
m_buffer(buffer), m_bitSize(8 * buffer.size())
{
}

Expand All @@ -30,11 +30,11 @@ BitBuffer::BitBuffer(const std::vector<uint8_t>& buffer, size_t bitSize) :
throw CppRuntimeException("BitBuffer: Bit size " + convertToString(bitSize) +
" out of range for given vector byte size " + convertToString(buffer.size()) + "!");

m_buffer.assign(&buffer[0], &buffer[0] + byteSize);
m_buffer.assign(buffer.data(), buffer.data() + byteSize);
}

BitBuffer::BitBuffer(std::vector<uint8_t>&& buffer) :
BitBuffer(std::move(buffer), 8 * buffer.size())
m_buffer(std::move(buffer)), m_bitSize(8 * m_buffer.size())
{
}

Expand Down Expand Up @@ -96,12 +96,12 @@ int BitBuffer::hashCode() const

const uint8_t* BitBuffer::getBuffer() const
{
return &m_buffer[0];
return m_buffer.data();
}

uint8_t* BitBuffer::getBuffer()
{
return &m_buffer[0];
return m_buffer.data();
}

size_t BitBuffer::getBitSize() const
Expand Down
8 changes: 4 additions & 4 deletions compiler/extensions/cpp/runtime/test/zserio/BitBufferTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ TEST(BitBufferTest, vectorMoveConstructor)
{
const size_t byteSize = 2;
std::vector<uint8_t> buffer(byteSize);
const uint8_t* bufferStart = &buffer[0];
const uint8_t* bufferStart = buffer.data();
const BitBuffer bitBuffer(std::move(buffer));
ASSERT_EQ(8 * byteSize, bitBuffer.getBitSize());
ASSERT_EQ(bufferStart, bitBuffer.getBuffer());
Expand All @@ -66,7 +66,7 @@ TEST(BitBufferTest, vectorBitSizeMoveConstructor)
{
const size_t bitSize = 11;
std::vector<uint8_t> buffer((bitSize + 7) / 8);
const uint8_t* bufferStart = &buffer[0];
const uint8_t* bufferStart = buffer.data();
const BitBuffer bitBuffer(std::move(buffer), bitSize);
ASSERT_EQ(bitSize, bitBuffer.getBitSize());
ASSERT_EQ(bufferStart, bitBuffer.getBuffer());
Expand All @@ -79,12 +79,12 @@ TEST(BitBufferTest, rawPointerConstructor)
{
const size_t bitSize = 11;
const std::vector<uint8_t> buffer((bitSize + 7) / 8);
const BitBuffer bitBuffer(&buffer[0], bitSize);
const BitBuffer bitBuffer(buffer.data(), bitSize);
ASSERT_EQ(bitSize, bitBuffer.getBitSize());

const size_t emptyBitSize = 0;
const std::vector<uint8_t> emptyBuffer;
const BitBuffer emptyBitBuffer(&emptyBuffer[0], emptyBitSize);
const BitBuffer emptyBitBuffer(emptyBuffer.data(), emptyBitSize);
ASSERT_EQ(emptyBitSize, emptyBitBuffer.getBitSize());
}

Expand Down

0 comments on commit f174603

Please sign in to comment.