#include "daal.h"
#include "service.h"
using namespace std;
using namespace daal;
using namespace data_management;
string datasetFileName = "../data/batch/logitboost_train.csv";
DataBlock rawData;
DataBlock compressedData;
DataBlock deCompressedData;
void prepareMemory();
void releaseMemory();
void printCRC32();
int main(int argc, char *argv[])
{
checkArguments(argc, argv, 1, &datasetFileName);
prepareMemory();
Compressor<zlib> compressor;
compressor.parameter.gzHeader = true;
compressor.parameter.level = level9;
CompressionStream comprStream(&compressor);
comprStream << rawData;
compressedData.setSize(comprStream.getCompressedDataSize());
compressedData.setPtr(new byte[compressedData.getSize()]);
comprStream.copyCompressedArray(compressedData);
Decompressor<zlib> decompressor;
decompressor.parameter.gzHeader = true;
DecompressionStream deComprStream(&decompressor);
deComprStream << compressedData;
deCompressedData.setSize(deComprStream.getDecompressedDataSize());
deCompressedData.setPtr(new byte[deCompressedData.getSize()]);
deComprStream.copyDecompressedArray(deCompressedData);
printCRC32();
releaseMemory();
return 0;
}
void prepareMemory()
{
byte *data;
rawData.setSize(readTextFile(datasetFileName, &data));
rawData.setPtr(data);
}
void printCRC32()
{
unsigned int crcRawData = 0;
unsigned int crcDecompressedData = 0;
crcRawData = getCRC32(rawData.getPtr(), crcRawData, rawData.getSize());
crcDecompressedData = getCRC32(deCompressedData.getPtr(), crcDecompressedData, deCompressedData.getSize());
cout << endl << "Compression example program results:" << endl << endl;
cout << "Raw data checksum: 0x" << hex << crcRawData << endl;
cout << "Decompressed data checksum: 0x" << hex << crcDecompressedData << endl;
if (rawData.getSize() != deCompressedData.getSize())
{
cout << "ERROR: Decompressed data size mismatches with the raw data size" << endl;
}
else if (crcRawData != crcDecompressedData)
{
cout << "ERROR: Decompressed data CRC mismatches with the raw data CRC" << endl;
}
else
{
cout << "OK: Decompressed data CRC matches with the raw data CRC" << endl;
}
}
void releaseMemory()
{
if(compressedData.getPtr())
{
delete [] compressedData.getPtr();
}
if(deCompressedData.getPtr())
{
delete [] deCompressedData.getPtr();
}
if(rawData.getPtr())
{
delete [] rawData.getPtr();
}
}