mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:27:35 +00:00
AK: Support 64-bit integers in BufferStream
This commit is contained in:
parent
b4568b1422
commit
0c4c5b5eb7
1 changed files with 115 additions and 6 deletions
|
@ -174,12 +174,6 @@ public:
|
|||
m_buffer[m_offset++] = (u8)(value >> 24);
|
||||
return *this;
|
||||
}
|
||||
|
||||
BufferStream& operator<<(size_t value)
|
||||
{
|
||||
return *this << (u32)value;
|
||||
}
|
||||
|
||||
BufferStream& operator>>(u32& value)
|
||||
{
|
||||
if (m_offset + sizeof(value) > unsigned(m_buffer.size())) {
|
||||
|
@ -198,6 +192,7 @@ public:
|
|||
value |= (u8(b0));
|
||||
return *this;
|
||||
}
|
||||
|
||||
BufferStream& operator<<(i32 value)
|
||||
{
|
||||
m_buffer[m_offset++] = value;
|
||||
|
@ -225,6 +220,120 @@ public:
|
|||
return *this;
|
||||
}
|
||||
|
||||
BufferStream& operator<<(u64 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);
|
||||
m_buffer[m_offset++] = (u8)(value >> 32);
|
||||
m_buffer[m_offset++] = (u8)(value >> 40);
|
||||
m_buffer[m_offset++] = (u8)(value >> 48);
|
||||
m_buffer[m_offset++] = (u8)(value >> 56);
|
||||
return *this;
|
||||
}
|
||||
BufferStream& operator>>(u64& 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++];
|
||||
u8 b4 = m_buffer[m_offset++];
|
||||
u8 b5 = m_buffer[m_offset++];
|
||||
u8 b6 = m_buffer[m_offset++];
|
||||
u8 b7 = m_buffer[m_offset++];
|
||||
|
||||
value = 0;
|
||||
value |= ((long long)b7 << 56);
|
||||
value |= ((long long)b6 << 48);
|
||||
value |= ((long long)b5 << 40);
|
||||
value |= ((long long)b4 << 32);
|
||||
value |= ((long long)b3 << 24);
|
||||
value |= ((long long)b2 << 16);
|
||||
value |= ((long long)b1 << 8);
|
||||
value |= ((long long)b0);
|
||||
return *this;
|
||||
}
|
||||
BufferStream& operator<<(i64 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);
|
||||
m_buffer[m_offset++] = (u8)(value >> 32);
|
||||
m_buffer[m_offset++] = (u8)(value >> 40);
|
||||
m_buffer[m_offset++] = (u8)(value >> 48);
|
||||
m_buffer[m_offset++] = (u8)(value >> 56);
|
||||
return *this;
|
||||
}
|
||||
BufferStream& operator>>(i64& 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++];
|
||||
u8 b4 = m_buffer[m_offset++];
|
||||
u8 b5 = m_buffer[m_offset++];
|
||||
u8 b6 = m_buffer[m_offset++];
|
||||
u8 b7 = m_buffer[m_offset++];
|
||||
|
||||
value = 0;
|
||||
value |= ((long long)b7 << 56);
|
||||
value |= ((long long)b6 << 48);
|
||||
value |= ((long long)b5 << 40);
|
||||
value |= ((long long)b4 << 32);
|
||||
value |= ((long long)b3 << 24);
|
||||
value |= ((long long)b2 << 16);
|
||||
value |= ((long long)b1 << 8);
|
||||
value |= ((long long)b0);
|
||||
return *this;
|
||||
}
|
||||
|
||||
BufferStream& operator<<(size_t value)
|
||||
{
|
||||
if constexpr(sizeof(size_t) == 4)
|
||||
return *this << (u32)value;
|
||||
else if constexpr(sizeof(size_t) == 8)
|
||||
return *this << (u64)value;
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
BufferStream& operator>>(size_t& value)
|
||||
{
|
||||
if constexpr(sizeof(size_t) == 4)
|
||||
return *this >> (u32&)value;
|
||||
else if constexpr(sizeof(size_t) == 8)
|
||||
return *this >> (u64&)value;
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
#ifndef __i386__
|
||||
BufferStream& operator<<(ssize_t value)
|
||||
{
|
||||
if constexpr(sizeof(ssize_t) == 4)
|
||||
return *this << (i32)value;
|
||||
else if constexpr(sizeof(ssize_t) == 8)
|
||||
return *this << (i64)value;
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
BufferStream& operator>>(ssize_t& value)
|
||||
{
|
||||
if constexpr(sizeof(ssize_t) == 4)
|
||||
return *this >> (i32&)value;
|
||||
else if constexpr(sizeof(ssize_t) == 8)
|
||||
return *this >> (i64&)value;
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
BufferStream& operator<<(const char* value)
|
||||
{
|
||||
return *this << StringView(value);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue