40 template<
int N,
typename T>
41 void WriteBinary(T value, std::ostream &ostr)
43 for (
int i = 0; i < N; ++i)
45 unsigned char byte = (value >> (i*8)) & 0xFF;
46 ostr.write(reinterpret_cast<char*>(&byte), 1);
56 template<
int N,
typename T>
57 T ReadBinary(std::istream &istr)
60 for (
int i = 0; i < N; ++i)
62 unsigned char byte = 0;
63 istr.read(reinterpret_cast<char*>(&byte), 1);
64 value |= byte << (i*8);
73 void WriteBinaryBool(
float value, std::ostream &ostr)
75 unsigned char v = value ? 1 : 0;
76 IOUtils::WriteBinary<1, unsigned char>(v, ostr);
83 bool ReadBinaryBool(std::istream &istr)
85 int v = IOUtils::ReadBinary<1, unsigned char>(istr);
94 void WriteBinaryFloat(
float value, std::ostream &ostr)
96 union {
float fValue;
unsigned int iValue; } u;
97 memset(&u, 0,
sizeof(u));
99 IOUtils::WriteBinary<4, unsigned int>(u.iValue, ostr);
107 float ReadBinaryFloat(std::istream &istr)
109 union {
float fValue;
unsigned int iValue; } u;
110 memset(&u, 0,
sizeof(u));
111 u.iValue = IOUtils::ReadBinary<4, unsigned int>(istr);
121 void WriteBinaryString(
const std::string &value, std::ostream &ostr)
123 int length = value.size();
124 WriteBinary<N, int>(length, ostr);
126 for (
int i = 0; i < length; ++i)
136 std::string ReadBinaryString(std::istream &istr)
138 int length = ReadBinary<N, int>(istr);
142 for (
int i = 0; i < length; ++i)