BufferStream: Add signed int overloads for read/write

This will be required in AudioServer
This commit is contained in:
Robin Burchell 2019-07-16 09:28:05 +02:00 committed by Andreas Kling
parent 1f77fbb75c
commit 2c929c3aa1

View file

@ -17,6 +17,21 @@ public:
ASSERT(!m_read_failure);
}
BufferStream& operator<<(i8 value)
{
m_buffer[m_offset++] = value;
return *this;
}
BufferStream& operator>>(i8& value)
{
if (m_offset + sizeof(value) >= unsigned(m_buffer.size())) {
m_read_failure = true;
return *this;
}
value = m_buffer[m_offset++];
return *this;
}
BufferStream& operator<<(u8 value)
{
m_buffer[m_offset++] = value;
@ -67,6 +82,26 @@ public:
return *this;
}
BufferStream& operator<<(i16 value)
{
m_buffer[m_offset++] = value;
m_buffer[m_offset++] = (u8)(value >> 8);
return *this;
}
BufferStream& operator>>(i16& value)
{
if (m_offset + sizeof(value) >= unsigned(m_buffer.size())) {
m_read_failure = true;
return *this;
}
value = 0;
u8 b0 = m_buffer[m_offset++];
u8 b1 = m_buffer[m_offset++];
value |= (u8(b1) << 8);
value |= (u8(b0));
return *this;
}
BufferStream& operator<<(u32 value)
{
m_buffer[m_offset++] = value;
@ -93,6 +128,32 @@ public:
value |= (u8(b0));
return *this;
}
BufferStream& operator<<(i32 value)
{
m_buffer[m_offset++] = value;
m_buffer[m_offset++] = (u8)(value >> 8);
m_buffer[m_offset++] = (u8)(value >> 16);
m_buffer[m_offset++] = (u8)(value >> 24);
return *this;
}
BufferStream& operator>>(i32& value)
{
if (m_offset + sizeof(value) >= unsigned(m_buffer.size())) {
m_read_failure = true;
return *this;
}
u8 b0 = m_buffer[m_offset++];
u8 b1 = m_buffer[m_offset++];
u8 b2 = m_buffer[m_offset++];
u8 b3 = m_buffer[m_offset++];
value = 0;
value |= (u8(b3) << 24);
value |= (u8(b2) << 16);
value |= (u8(b1) << 8);
value |= (u8(b0));
return *this;
}
BufferStream& operator<<(const StringView& value)
{