| 42 | } |
| 43 | |
| 44 | UInt32 CompressionCodecMultiple::doCompressData(const char * source, UInt32 source_size, char * dest) const |
| 45 | { |
| 46 | PODArray<char> compressed_buf; |
| 47 | PODArray<char> uncompressed_buf(source, source + source_size); |
| 48 | |
| 49 | dest[0] = static_cast<UInt8>(codecs.size()); |
| 50 | |
| 51 | size_t codecs_byte_pos = 1; |
| 52 | for (size_t idx = 0; idx < codecs.size(); ++idx, ++codecs_byte_pos) |
| 53 | { |
| 54 | const auto codec = codecs[idx]; |
| 55 | dest[codecs_byte_pos] = codec->getMethodByte(); |
| 56 | compressed_buf.resize(codec->getCompressedReserveSize(source_size)); |
| 57 | |
| 58 | UInt32 size_compressed = codec->compress(uncompressed_buf.data(), source_size, compressed_buf.data()); |
| 59 | |
| 60 | uncompressed_buf.swap(compressed_buf); |
| 61 | source_size = size_compressed; |
| 62 | } |
| 63 | |
| 64 | memcpy(&dest[1 + codecs.size()], uncompressed_buf.data(), source_size); |
| 65 | |
| 66 | return static_cast<UInt32>(1 + codecs.size() + source_size); |
| 67 | } |
| 68 | |
| 69 | UInt32 CompressionCodecMultiple::doDecompressData(const char * source, UInt32 source_size, char * dest, UInt32 decompressed_size) const |
| 70 | { |
nothing calls this directly
no test coverage detected