37 template<
int N,
typename T>
38 void WriteBinary(T value, std::ostream &ostr)
40 for (
int i = 0; i < N; ++i)
42 unsigned char byte = (value >> (i*8)) & 0xFF;
43 ostr.write(reinterpret_cast<char*>(&byte), 1);
53 template<
int N,
typename T>
54 T ReadBinary(std::istream &istr)
57 for (
int i = 0; i < N; ++i)
59 unsigned char byte = 0;
60 istr.read(reinterpret_cast<char*>(&byte), 1);
61 value |= byte << (i*8);
70 void WriteBinaryBool(
float value, std::ostream &ostr)
72 unsigned char v = value ? 1 : 0;
73 IOUtils::WriteBinary<1, unsigned char>(v, ostr);
80 bool ReadBinaryBool(std::istream &istr)
82 int v = IOUtils::ReadBinary<1, unsigned char>(istr);
91 void WriteBinaryFloat(
float value, std::ostream &ostr)
93 union {
float fValue;
unsigned int iValue; } u;
94 memset(&u, 0,
sizeof(u));
96 IOUtils::WriteBinary<4, unsigned int>(u.iValue, ostr);
104 float ReadBinaryFloat(std::istream &istr)
106 union {
float fValue;
unsigned int iValue; } u;
107 memset(&u, 0,
sizeof(u));
108 u.iValue = IOUtils::ReadBinary<4, unsigned int>(istr);
118 void WriteBinaryString(
const std::string &value, std::ostream &ostr)
120 int length = value.size();
121 WriteBinary<N, int>(length, ostr);
123 for (
int i = 0; i < length; ++i)
133 std::string ReadBinaryString(std::istream &istr)
135 int length = ReadBinary<N, int>(istr);
139 for (
int i = 0; i < length; ++i)