35 #ifndef NEKTAR_LIB_UTILITIES_BASIC_UTILS_COMPRESSDATA_H 36 #define NEKTAR_LIB_UTILITIES_BASIC_UTILS_COMPRESSDATA_H 47 namespace LibUtilities
70 namespace CompressData
78 template<
class T>
int ZlibEncode(std::vector<T>& in, std::string& out)
85 unsigned char* input = (
unsigned char*)(&in[0]);
91 ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION);
93 ASSERTL0(ret == Z_OK,
"Error initializing Zlib.");
95 strm.avail_in = (
unsigned int)in.size() *
sizeof(T) /
sizeof(
char);
100 strm.avail_out =
CHUNK;
101 strm.next_out = (
unsigned char*)(&buffer[0]);
103 ret = deflate(&strm, Z_FINISH);
107 ASSERTL0(ret != Z_STREAM_ERROR,
"Zlib stream error");
109 have =
CHUNK - strm.avail_out;
110 out += buffer.substr(0, have);
112 }
while (strm.avail_out == 0);
115 ASSERTL0(strm.avail_in == 0,
"Not all input was used.");
118 ASSERTL0(ret == Z_STREAM_END,
"Stream not finished");
121 (
void)deflateEnd(&strm);
131 std::string &compressedDataString,
132 std::string &base64string);
161 buffer.resize(
CHUNK);
164 strm.zalloc = Z_NULL;
166 strm.opaque = Z_NULL;
168 strm.next_in = Z_NULL;
169 ret = inflateInit(&strm);
170 ASSERTL0(ret == Z_OK,
"Error initializing zlib decompression.");
172 strm.avail_in = (
unsigned int)in.size();
173 strm.next_in = (
unsigned char*)(&in[0]);
176 strm.avail_out =
CHUNK;
177 strm.next_out = (
unsigned char*)(&buffer[0]);
179 ret = inflate(&strm, Z_NO_FLUSH);
181 ASSERTL0(ret != Z_STREAM_ERROR,
"Stream error occured.");
189 (
void)inflateEnd(&strm);
193 have =
CHUNK - strm.avail_out;
194 output += buffer.substr(0, have);
196 }
while (strm.avail_out == 0);
198 (
void)inflateEnd(&strm);
200 if (ret == Z_STREAM_END)
202 T* readFieldData = (T*) output.c_str();
203 unsigned int len = (
unsigned int)output.size() *
sizeof(*output.c_str())
205 out.assign( readFieldData, readFieldData + len);
221 std::string &base64string,
222 std::string &compressedDataString);
#define ASSERTL0(condition, msg)
void BinaryStrToBase64Str(std::string &compressedDataString, std::string &base64string)
int ZlibDecode(std::string &in, std::vector< T > &out)
std::string GetCompressString(void)
int ZlibEncode(std::vector< T > &in, std::string &out)
#define LIB_UTILITIES_EXPORT
EndianType Endianness(void)
int ZlibEncodeToBase64Str(std::vector< T > &in, std::string &out64)
std::string GetBitSizeStr(void)
const std::string EndianTypeMap[]
int ZlibDecodeFromBase64Str(std::string &in64, std::vector< T > &out)
void Base64StrToBinaryStr(std::string &base64string, std::string &compressedDataString)