mm_io_c: Add read_double()/write_double()

This commit is contained in:
Moritz Bunkus 2012-08-05 12:37:59 +02:00
parent 7e4204f5f9
commit 92cbd265d5
2 changed files with 22 additions and 0 deletions

View File

@ -32,6 +32,11 @@
#include "common/strings/editing.h" #include "common/strings/editing.h"
#include "common/strings/parsing.h" #include "common/strings/parsing.h"
union double_to_uint64_t {
uint64_t i;
double d;
};
#if !defined(SYS_WINDOWS) #if !defined(SYS_WINDOWS)
static std::string static std::string
get_errno_msg() { get_errno_msg() {
@ -365,6 +370,14 @@ mm_io_c::read_uint64_be() {
return get_uint64_be(buffer); 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 uint32_t
mm_io_c::read(memory_cptr &buffer, mm_io_c::read(memory_cptr &buffer,
size_t size, size_t size,
@ -436,6 +449,13 @@ mm_io_c::write_uint64_be(uint64_t value) {
return write(&buffer, sizeof(uint64_t)); 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 size_t
mm_io_c::write(const void *buffer, mm_io_c::write(const void *buffer,
size_t size) { size_t size) {

View File

@ -149,6 +149,7 @@ public:
virtual uint32_t read_uint24_be(); virtual uint32_t read_uint24_be();
virtual uint32_t read_uint32_be(); virtual uint32_t read_uint32_be();
virtual uint64_t read_uint64_be(); virtual uint64_t read_uint64_be();
virtual double read_double();
virtual int write_uint8(unsigned char value); virtual int write_uint8(unsigned char value);
virtual int write_uint16_le(uint16_t value); virtual int write_uint16_le(uint16_t value);
virtual int write_uint32_le(uint32_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_uint16_be(uint16_t value);
virtual int write_uint32_be(uint32_t value); virtual int write_uint32_be(uint32_t value);
virtual int write_uint64_be(uint64_t value); virtual int write_uint64_be(uint64_t value);
virtual int write_double(double value);
virtual void skip(int64 numbytes); virtual void skip(int64 numbytes);
virtual size_t write(const void *buffer, size_t size); virtual size_t write(const void *buffer, size_t size);
virtual size_t write(std::string const &buffer) { virtual size_t write(std::string const &buffer) {