bool decompress(Codec& codec) { cout << "Decompressing with " << codec.getName() << " (multiple times)..." << endl; decompressedBuffer = new char[originalSize]; Timer timer; const int repeatCount = 50; double decompressionTime = FLT_MAX; for (int i = 0; i < repeatCount; ++i) { timer.reset(); bool ok = codec.decompress(); double currentDecompressionTime = timer.query(); if (!ok) { cout << "ERROR: Could not decompress" << endl; return false; } decompressionTime = min(decompressionTime, currentDecompressionTime); } double mbps = static_cast<double>(originalSize) / MEGABYTE / decompressionTime; cout << "Decompression speed: " << mbps << " MB/s" << endl; return true; }
bool compress(Codec& codec) { cout << "Compressing with " << codec.getName() << "..." << endl; compressedBufferSize = codec.getMaxCompressedSize(); compressedBuffer = new char[compressedBufferSize]; Timer timer; bool ok = codec.compress(); double compressionTime = timer.query(); if (!ok) { cout << "ERROR: Could not compress" << endl; return false; } double mbps = static_cast<double>(originalSize) / MEGABYTE / compressionTime; double compressionRatio = static_cast<double>(compressedSize) / static_cast<double>(originalSize) * 100.0; cout << "Compressed in " << compressionTime << " s, " << mbps << " MB/s" << endl; cout << "Compressed size: " << static_cast<double>(compressedSize) / MEGABYTE << " MB (" << compressedSize / KILOBYTE << " KB)" << endl; cout << "Compression ratio: " << compressionRatio << "%" << endl; return true; }