35#ifndef NEKTAR_LIB_UTILITIES_BASIC_UTILS_COMPRESSDATA_H
36#define NEKTAR_LIB_UTILITIES_BASIC_UTILS_COMPRESSDATA_H
58 "LittleEndian",
"BigWordEndian",
71template <
class T>
int ZlibEncode(std::vector<T> &in, std::string &out)
78 unsigned char *input = (
unsigned char *)(&in[0]);
84 ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION);
86 ASSERTL0(ret == Z_OK,
"Error initializing Zlib.");
88 strm.avail_in = (
unsigned int)in.size() *
sizeof(T) /
sizeof(
char);
94 strm.avail_out =
CHUNK;
95 strm.next_out = (
unsigned char *)(&
buffer[0]);
97 ret = deflate(&strm, Z_FINISH);
101 ASSERTL0(ret != Z_STREAM_ERROR,
"Zlib stream error");
103 have =
CHUNK - strm.avail_out;
104 out +=
buffer.substr(0, have);
106 }
while (strm.avail_out == 0);
109 ASSERTL0(strm.avail_in == 0,
"Not all input was used.");
112 ASSERTL0(ret == Z_STREAM_END,
"Stream not finished");
115 (
void)deflateEnd(&strm);
124 std::string &compressedDataString, std::string &base64string);
145template <
class T>
int ZlibDecode(std::string &in, std::vector<T> &out)
154 strm.zalloc = Z_NULL;
156 strm.opaque = Z_NULL;
158 strm.next_in = Z_NULL;
159 ret = inflateInit(&strm);
160 ASSERTL0(ret == Z_OK,
"Error initializing zlib decompression.");
162 strm.avail_in = (
unsigned int)in.size();
163 strm.next_in = (
unsigned char *)(&in[0]);
167 strm.avail_out =
CHUNK;
168 strm.next_out = (
unsigned char *)(&
buffer[0]);
170 ret = inflate(&strm, Z_NO_FLUSH);
172 ASSERTL0(ret != Z_STREAM_ERROR,
"Stream error occured.");
181 (
void)inflateEnd(&strm);
185 have =
CHUNK - strm.avail_out;
186 output +=
buffer.substr(0, have);
188 }
while (strm.avail_out == 0);
190 (
void)inflateEnd(&strm);
192 if (ret == Z_STREAM_END)
194 T *readFieldData = (T *)output.c_str();
196 (
unsigned int)output.size() *
sizeof(*output.c_str()) /
sizeof(T);
197 out.assign(readFieldData, readFieldData + len);
211 std::string &base64string, std::string &compressedDataString);
#define ASSERTL0(condition, msg)
#define LIB_UTILITIES_EXPORT
void Base64StrToBinaryStr(std::string &base64string, std::string &compressedDataString)
std::string GetBitSizeStr(void)
int ZlibDecode(std::string &in, std::vector< T > &out)
int ZlibEncode(std::vector< T > &in, std::string &out)
int ZlibDecodeFromBase64Str(std::string &in64, std::vector< T > &out)
void BinaryStrToBase64Str(std::string &compressedDataString, std::string &base64string)
std::string GetCompressString(void)
int ZlibEncodeToBase64Str(std::vector< T > &in, std::string &out64)
const std::string EndianTypeMap[]
EndianType Endianness(void)