From 7aaea085de7ee68d5c6001e04cfece47deccbd87 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 2 Dec 2019 09:19:56 +0100 Subject: [PATCH] AK: Allow BufferStream to serialize/deserialize floats --- AK/BufferStream.h | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/AK/BufferStream.h b/AK/BufferStream.h index 8c703927c0..66c532b68b 100644 --- a/AK/BufferStream.h +++ b/AK/BufferStream.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include namespace AK { @@ -37,7 +37,7 @@ public: m_buffer[m_offset++] = value; return *this; } - BufferStream& operator>>(u8& value ) + BufferStream& operator>>(u8& value) { if (m_offset + sizeof(value) > unsigned(m_buffer.size())) { m_read_failure = true; @@ -52,7 +52,7 @@ public: m_buffer[m_offset++] = value; return *this; } - BufferStream& operator>>(bool& value ) + BufferStream& operator>>(bool& value) { if (m_offset + sizeof(value) > unsigned(m_buffer.size())) { m_read_failure = true; @@ -62,6 +62,29 @@ public: return *this; } + BufferStream& operator<<(float value) + { + union bits { + float as_float; + u32 as_u32; + } u; + u.as_float = value; + return *this << u.as_u32; + } + + BufferStream& operator>>(float& value) + { + union bits { + float as_float; + u32 as_u32; + } u; + *this >> u.as_u32; + if (m_read_failure) + return *this; + value = u.as_float; + return *this; + } + BufferStream& operator<<(char value) { m_buffer[m_offset++] = (u8)value; @@ -213,7 +236,8 @@ public: m_read_failure = false; } - bool handle_read_failure() { + bool handle_read_failure() + { bool old = m_read_failure; m_read_failure = false; return old;