41 template<
int N,
typename T>
42 void WriteBinary(T value, std::ostream &ostr)
44 for (
int i = 0; i < N; ++i)
46 unsigned char byte = (value >> (i*8)) & 0xFF;
47 ostr.write(reinterpret_cast<char*>(&byte), 1);
57 template<
int N,
typename T>
58 T ReadBinary(std::istream &istr)
61 for (
int i = 0; i < N; ++i)
63 unsigned char byte = 0;
64 istr.read(reinterpret_cast<char*>(&byte), 1);
65 value |= byte << (i*8);
74 inline void WriteBinaryBool(
bool value, std::ostream &ostr)
76 unsigned char v = value ? 1 : 0;
77 IOUtils::WriteBinary<1, unsigned char>(v, ostr);
84 inline bool ReadBinaryBool(std::istream &istr)
86 int v = IOUtils::ReadBinary<1, unsigned char>(istr);
95 inline void WriteBinaryFloat(
float value, std::ostream &ostr)
107 IOUtils::WriteBinary<4, unsigned int>(u.iValue, ostr);
115 inline float ReadBinaryFloat(std::istream &istr)
126 u.iValue = IOUtils::ReadBinary<4, unsigned int>(istr);
136 void WriteBinaryString(
const std::string &value, std::ostream &ostr)
138 int length = value.size();
139 WriteBinary<N, int>(length, ostr);
141 for (
int i = 0; i < length; ++i)
151 std::string ReadBinaryString(std::istream &istr)
153 int length = ReadBinary<N, int>(istr);
157 for (
int i = 0; i < length; ++i)