From 1a2f50ec97cf029be4649a50ffbf18263c369d3a Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Wed, 18 Dec 2024 23:05:53 -0800 Subject: [PATCH] add float/double functions in StringWriter --- src/Strings.hh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Strings.hh b/src/Strings.hh index 17b5090..8f5a897 100644 --- a/src/Strings.hh +++ b/src/Strings.hh @@ -675,7 +675,7 @@ public: if (offset > this->data.size() - sizeof(T)) { this->data.resize(offset + sizeof(T), '\0'); } - *reinterpret_cast(this->data.data() + offset) = v; + memcpy(this->data.data() + offset, &v, sizeof(v)); } inline void put_u8(uint8_t v) { this->put(v); } @@ -690,6 +690,8 @@ public: inline void put_s48(int64_t v) { this->put(v); } inline void put_u64(uint64_t v) { this->put(v); } inline void put_s64(int64_t v) { this->put(v); } + inline void put_f32(float v) { this->put(v); } + inline void put_f64(double v) { this->put(v); } inline void put_u16r(uint16_t v) { this->put(v); } inline void put_s16r(int16_t v) { this->put(v); } @@ -701,6 +703,8 @@ public: inline void put_s48r(int64_t v) { this->put(v); } inline void put_u64r(uint64_t v) { this->put(v); } inline void put_s64r(int64_t v) { this->put(v); } + inline void put_f32r(float v) { this->put(v); } + inline void put_f64r(double v) { this->put(v); } inline void put_u16b(uint16_t v) { this->put(v); } inline void put_s16b(int16_t v) { this->put(v); } @@ -712,6 +716,8 @@ public: inline void put_s48b(int64_t v) { this->put(v); } inline void put_u64b(uint64_t v) { this->put(v); } inline void put_s64b(int64_t v) { this->put(v); } + inline void put_f32b(float v) { this->put(v); } + inline void put_f64b(double v) { this->put(v); } inline void put_u16l(uint16_t v) { this->put(v); } inline void put_s16l(int16_t v) { this->put(v); } @@ -723,6 +729,8 @@ public: inline void put_s48l(int64_t v) { this->put(v); } inline void put_u64l(uint64_t v) { this->put(v); } inline void put_s64l(int64_t v) { this->put(v); } + inline void put_f32l(float v) { this->put(v); } + inline void put_f64l(double v) { this->put(v); } inline void pput_u8(size_t offset, uint8_t v) { this->pput(offset, v); } inline void pput_s8(size_t offset, int8_t v) { this->pput(offset, v); } @@ -736,6 +744,8 @@ public: inline void pput_s48(size_t offset, int64_t v) { this->pput(offset, v); } inline void pput_u64(size_t offset, uint64_t v) { this->pput(offset, v); } inline void pput_s64(size_t offset, int64_t v) { this->pput(offset, v); } + inline void pput_f32(size_t offset, float v) { this->pput(offset, v); } + inline void pput_f64(size_t offset, double v) { this->pput(offset, v); } inline void pput_u16r(size_t offset, uint16_t v) { this->pput(offset, v); } inline void pput_s16r(size_t offset, int16_t v) { this->pput(offset, v); } @@ -747,6 +757,8 @@ public: inline void pput_s48r(size_t offset, int64_t v) { this->pput(offset, v); } inline void pput_u64r(size_t offset, uint64_t v) { this->pput(offset, v); } inline void pput_s64r(size_t offset, int64_t v) { this->pput(offset, v); } + inline void pput_f32r(size_t offset, float v) { this->pput(offset, v); } + inline void pput_f64r(size_t offset, double v) { this->pput(offset, v); } inline void pput_u16b(size_t offset, uint16_t v) { this->pput(offset, v); } inline void pput_s16b(size_t offset, int16_t v) { this->pput(offset, v); } @@ -758,6 +770,8 @@ public: inline void pput_s48b(size_t offset, int64_t v) { this->pput(offset, v); } inline void pput_u64b(size_t offset, uint64_t v) { this->pput(offset, v); } inline void pput_s64b(size_t offset, int64_t v) { this->pput(offset, v); } + inline void pput_f32b(size_t offset, float v) { this->pput(offset, v); } + inline void pput_f64b(size_t offset, double v) { this->pput(offset, v); } inline void pput_u16l(size_t offset, uint16_t v) { this->pput(offset, v); } inline void pput_s16l(size_t offset, int16_t v) { this->pput(offset, v); } @@ -769,6 +783,8 @@ public: inline void pput_s48l(size_t offset, int64_t v) { this->pput(offset, v); } inline void pput_u64l(size_t offset, uint64_t v) { this->pput(offset, v); } inline void pput_s64l(size_t offset, int64_t v) { this->pput(offset, v); } + inline void pput_f32l(size_t offset, float v) { this->pput(offset, v); } + inline void pput_f64l(size_t offset, double v) { this->pput(offset, v); } inline std::string& str() { return this->data;