diff --git a/src/common/mtag-buffer.cc b/src/common/mtag-buffer.cc index e20a2b148..b75230ef7 100644 --- a/src/common/mtag-buffer.cc +++ b/src/common/mtag-buffer.cc @@ -36,6 +36,23 @@ MtagBuffer::WriteU64 (uint64_t data) WriteU8 ((data >> 48) & 0xff); WriteU8 ((data >> 54) & 0xff); } +void +MtagBuffer::WriteDouble (double v) +{ + uint8_t *buf = (uint8_t *)&v; + for (uint32_t i = 0; i < sizeof (double); ++i, ++buf) + { + WriteU8 (*buf); + } +} +void +MtagBuffer::Write (const uint8_t *buffer, uint32_t size) +{ + for (uint32_t i = 0; i < size; ++i, ++buffer) + { + WriteU8 (*buffer); + } +} uint8_t MtagBuffer::ReadU8 (void) { @@ -100,6 +117,25 @@ MtagBuffer::ReadU64 (void) return data; } +double +MtagBuffer::ReadDouble (void) +{ + double v; + uint8_t *buf = (uint8_t *)&v; + for (uint32_t i = 0; i < sizeof (double); ++i, ++buf) + { + *buf = ReadU8 (); + } + return v; +} +void +MtagBuffer::Read (uint8_t *buffer, uint32_t size) +{ + for (uint32_t i = 0; i < size; ++i, ++buffer) + { + *buffer = ReadU8 (); + } +} MtagBuffer::MtagBuffer (uint8_t *start, uint8_t *end) : m_current (start), m_end (end) diff --git a/src/common/mtag-buffer.h b/src/common/mtag-buffer.h index 0194c2006..c60e71657 100644 --- a/src/common/mtag-buffer.h +++ b/src/common/mtag-buffer.h @@ -15,10 +15,14 @@ public: void WriteU16 (uint16_t v); void WriteU32 (uint32_t v); void WriteU64 (uint64_t v); + void WriteDouble (double v); + void Write (const uint8_t *buffer, uint32_t size); uint8_t ReadU8 (void); uint16_t ReadU16 (void); uint32_t ReadU32 (void); uint64_t ReadU64 (void); + double ReadDouble (void); + void Read (uint8_t *buffer, uint32_t size); void CopyFrom (MtagBuffer o); private: