mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
Added skip() to byte_stream_writer.
This commit is contained in:
parent
645296b925
commit
7bb39b56bf
@ -220,6 +220,28 @@ namespace etl
|
||||
return success;
|
||||
}
|
||||
|
||||
//***************************************************************************
|
||||
/// Skip n items of T, up to the maximum space available.
|
||||
/// Returns <b>true</b> if the skip was possible.
|
||||
/// Returns <b>false</b> if the full skip size was not possible.
|
||||
//***************************************************************************
|
||||
template <typename T>
|
||||
bool skip(size_t n)
|
||||
{
|
||||
size_t maximum = available<T>();
|
||||
|
||||
if (n < maximum)
|
||||
{
|
||||
pcurrent += (n * sizeof(T));
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
pcurrent += (maximum * sizeof(T));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//***************************************************************************
|
||||
/// Sets the index back to the position in the stream. Default = 0.
|
||||
//***************************************************************************
|
||||
|
||||
@ -400,6 +400,58 @@ namespace
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(write_and_skip_int32_t)
|
||||
{
|
||||
// Tests assume big endian.
|
||||
std::array<char, sizeof(int32_t) * 4> storage = { char(0xF0), char(0xF1), char(0xF2), char(0xF3),
|
||||
char(0xF4), char(0xF5), char(0xF6), char(0xF7),
|
||||
char(0xF8), char(0xF9), char(0xFA), char(0xFB),
|
||||
char(0xFC), char(0xFD), char(0xFE), char(0xFF) };
|
||||
|
||||
std::array<char, sizeof(int32_t) * 4> compare_data = { char(0x01), char(0x02), char(0x03), char(0x04),
|
||||
char(0xF4), char(0xF5), char(0xF6), char(0xF7),
|
||||
char(0xF8), char(0xF9), char(0xFA), char(0xFB),
|
||||
char(0x05), char(0x06), char(0x07), char(0x08) };
|
||||
|
||||
etl::byte_stream_writer byte_stream(storage.data(), storage.size(), etl::endian::big);
|
||||
|
||||
CHECK(byte_stream.write(int32_t(0x01020304)));
|
||||
CHECK(byte_stream.skip<int32_t>(2));
|
||||
CHECK(byte_stream.write(int32_t(0x05060708)));
|
||||
CHECK(!byte_stream.skip<int32_t>(1));
|
||||
|
||||
for (size_t i = 0U; i < storage.size(); ++i)
|
||||
{
|
||||
CHECK_EQUAL(int(compare_data[i]), int(storage[i]));
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(read_and_skip_int32_t)
|
||||
{
|
||||
// Tests assume big endian.
|
||||
std::array<char, sizeof(int32_t) * 4> storage = { char(0x01), char(0x02), char(0x03), char(0x04),
|
||||
char(0xF4), char(0xF5), char(0xF6), char(0xF7),
|
||||
char(0xF8), char(0xF9), char(0xFA), char(0xFB),
|
||||
char(0x05), char(0x06), char(0x07), char(0x08) };
|
||||
|
||||
std::array<etl::optional<int32_t>, 4> compare = { int32_t(0x01020304), int32_t(0xF4F5F6F7), int32_t(0xF8F9FAFB), int32_t(0x05060708) };
|
||||
std::array<etl::optional<int32_t>, 4> result = { int32_t(0xF0F1F2F3), int32_t(0xF4F5F6F7), int32_t(0xF8F9FAFB), int32_t(0xFCFDFEFF) };
|
||||
|
||||
etl::byte_stream_reader byte_stream(storage.data(), storage.size(), etl::endian::big);
|
||||
|
||||
CHECK(result[0] = byte_stream.read<int32_t>());
|
||||
CHECK(byte_stream.skip<int32_t>(2));
|
||||
CHECK(result[3] = byte_stream.read<int32_t>());
|
||||
CHECK(!byte_stream.skip<int32_t>(2));
|
||||
|
||||
for (size_t i = 0U; i < result.size(); ++i)
|
||||
{
|
||||
CHECK_EQUAL(compare[i].value(), result[i].value());
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(write_read_bool)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user