diff --git a/src/common/mm_io.cpp b/src/common/mm_io.cpp index 8de842474..07da869d5 100644 --- a/src/common/mm_io.cpp +++ b/src/common/mm_io.cpp @@ -32,6 +32,11 @@ #include "common/strings/editing.h" #include "common/strings/parsing.h" +union double_to_uint64_t { + uint64_t i; + double d; +}; + #if !defined(SYS_WINDOWS) static std::string get_errno_msg() { @@ -365,6 +370,14 @@ mm_io_c::read_uint64_be() { return get_uint64_be(buffer); } +double +mm_io_c::read_double() { + double_to_uint64_t d2ui; + + d2ui.i = read_uint64_be(); + return d2ui.d; +} + uint32_t mm_io_c::read(memory_cptr &buffer, size_t size, @@ -436,6 +449,13 @@ mm_io_c::write_uint64_be(uint64_t value) { return write(&buffer, sizeof(uint64_t)); } +int +mm_io_c::write_double(double value) { + double_to_uint64_t d2ui; + d2ui.d = value; + return write_uint64_be(d2ui.i); +} + size_t mm_io_c::write(const void *buffer, size_t size) { diff --git a/src/common/mm_io.h b/src/common/mm_io.h index 75b62708e..3f85fbb73 100644 --- a/src/common/mm_io.h +++ b/src/common/mm_io.h @@ -149,6 +149,7 @@ public: virtual uint32_t read_uint24_be(); virtual uint32_t read_uint32_be(); virtual uint64_t read_uint64_be(); + virtual double read_double(); virtual int write_uint8(unsigned char value); virtual int write_uint16_le(uint16_t value); virtual int write_uint32_le(uint32_t value); @@ -156,6 +157,7 @@ public: virtual int write_uint16_be(uint16_t value); virtual int write_uint32_be(uint32_t value); virtual int write_uint64_be(uint64_t value); + virtual int write_double(double value); virtual void skip(int64 numbytes); virtual size_t write(const void *buffer, size_t size); virtual size_t write(std::string const &buffer) {