[General] Add compression flag to RW methods

Advantages: and 2 bytes per float value, using huffman algorithm for structures and strings.
Disadvantages: bad for performance and precision for float/double variables.
0.6.1
Koncord 8 years ago
parent 6a472de1c0
commit 4934be18f0

@ -50,12 +50,22 @@ namespace mwmp
} }
template<class templateType> template<class templateType>
void RW(templateType &data, bool write) void RW(templateType &data, bool write, bool compress = 0)
{ {
if (write) if (write)
bs->Write(data); {
if(compress)
bs->WriteCompressed(data);
else
bs->Write(data);
}
else else
bs->Read(data); {
if(compress)
bs->ReadCompressed(data);
else
bs->Read(data);
}
} }
void RW(bool &data, bool write) void RW(bool &data, bool write)
@ -73,17 +83,23 @@ namespace mwmp
} }
} }
void RW(std::string &str, bool write) void RW(std::string &str, bool write, bool compress = 0)
{ {
if (write) if (write)
{ {
RakNet::RakString rstr(str.c_str()); RakNet::RakString rstr(str.c_str());
bs->Write(rstr); if(compress)
rstr.SerializeCompressed(bs);
else
bs->Write(rstr);
} }
else else
{ {
RakNet::RakString rstr; RakNet::RakString rstr;
bs->Read(rstr); if(compress)
rstr.DeserializeCompressed(bs);
else
bs->Read(rstr);
str = rstr.C_String(); str = rstr.C_String();
} }
} }

Loading…
Cancel
Save