Added read/write for float (kind of hacky, assumes IEE)
This commit is contained in:
parent
ccf0707a0e
commit
7201035a20
|
@ -35,6 +35,18 @@ namespace io {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
float read(std::istream& is) {
|
||||||
|
union {
|
||||||
|
uint32_t a;
|
||||||
|
float b;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.a = read_bytes<uint32_t>(is, sizeof(uint32_t));
|
||||||
|
|
||||||
|
return u.b;
|
||||||
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
size_t read(std::istream& is) {
|
size_t read(std::istream& is) {
|
||||||
size_t value = 0;
|
size_t value = 0;
|
||||||
|
|
|
@ -31,6 +31,17 @@ namespace io {
|
||||||
write_bytes(os, value, sizeof(T));
|
write_bytes(os, value, sizeof(T));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
void write(std::ostream& os, float value) {
|
||||||
|
union {
|
||||||
|
uint32_t a;
|
||||||
|
float b;
|
||||||
|
} u;
|
||||||
|
|
||||||
|
u.b = value;
|
||||||
|
write_bytes(os, u.a, sizeof(uint32_t));
|
||||||
|
}
|
||||||
|
|
||||||
// Special implementation for size_t (also uint64_t, so maybe this is not that smart)
|
// Special implementation for size_t (also uint64_t, so maybe this is not that smart)
|
||||||
template <>
|
template <>
|
||||||
void write(std::ostream& os, size_t value) {
|
void write(std::ostream& os, size_t value) {
|
||||||
|
|
|
@ -74,6 +74,24 @@ int main() {
|
||||||
return io::read<int>(f) == 80085;
|
return io::read<int>(f) == 80085;
|
||||||
}());
|
}());
|
||||||
|
|
||||||
|
Test("Write for float", [] {
|
||||||
|
std::fstream f("test.bin", std::ios::trunc | std::ios::in | std::ios::out);
|
||||||
|
io::write<float>(f, 123.654f);
|
||||||
|
|
||||||
|
bool succes = 4 == f.tellg(); f.seekg(0); char c;
|
||||||
|
f.read(&c,1); succes &= (c & 0xff) == 0x42;
|
||||||
|
f.read(&c,1); succes &= (c & 0xff) == 0xf7;
|
||||||
|
f.read(&c,1); succes &= (c & 0xff) == 0x4e;
|
||||||
|
f.read(&c,1); succes &= (c & 0xff) == 0xd9;
|
||||||
|
return succes;
|
||||||
|
}());
|
||||||
|
|
||||||
|
Test("Read for float", [] {
|
||||||
|
std::ifstream f("test.bin");
|
||||||
|
return io::read<float>(f) == 123.654f;
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
Test("Write for short size_t", [] {
|
Test("Write for short size_t", [] {
|
||||||
std::fstream f("test.bin", std::ios::trunc | std::ios::in | std::ios::out);
|
std::fstream f("test.bin", std::ios::trunc | std::ios::in | std::ios::out);
|
||||||
io::write<size_t>(f, 12);
|
io::write<size_t>(f, 12);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user