Commit 7fad424e by Shahbaz Youssefi Committed by Commit Bot

Avoid vector copy in BinaryOutputStream::writeIntVector

Also adds a unit test to make sure readIntVector and writeIntVector match. It was not immediately clear that writing the vector size in writeIntVector is writing an int instead of a size_t. Bug: angleproject:3394 Change-Id: I09a003c169dbc47e40c0cd3e4da6f1d7a905c6da Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1983162Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
parent 9fac1817
...@@ -206,7 +206,7 @@ class BinaryOutputStream : angle::NonCopyable ...@@ -206,7 +206,7 @@ class BinaryOutputStream : angle::NonCopyable
} }
template <class IntT> template <class IntT>
void writeIntVector(std::vector<IntT> param) void writeIntVector(const std::vector<IntT> &param)
{ {
writeInt(param.size()); writeInt(param.size());
for (IntT element : param) for (IntT element : param)
......
...@@ -65,4 +65,24 @@ TEST(BinaryInputStream, Overflow) ...@@ -65,4 +65,24 @@ TEST(BinaryInputStream, Overflow)
stream.readBytes(outputData.data(), std::numeric_limits<size_t>::max() - dataSize - 2); stream.readBytes(outputData.data(), std::numeric_limits<size_t>::max() - dataSize - 2);
} }
} }
// Test that readIntVector and writeIntVector match.
TEST(BinaryStream, IntVector)
{
std::vector<unsigned int> writeData = {1, 2, 3, 4, 5};
std::vector<unsigned int> readData;
gl::BinaryOutputStream out;
out.writeIntVector(writeData);
gl::BinaryInputStream in(out.data(), out.length());
in.readIntVector<unsigned int>(&readData);
ASSERT_EQ(writeData.size(), readData.size());
for (size_t i = 0; i < writeData.size(); ++i)
{
ASSERT_EQ(writeData[i], readData[i]);
}
}
} // namespace angle } // namespace angle
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment