MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / doCompressData

Method doCompressData

src/Compression/CompressionCodecMultiple.cpp:44–67  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42}
43
44UInt32 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
69UInt32 CompressionCodecMultiple::doDecompressData(const char * source, UInt32 source_size, char * dest, UInt32 decompressed_size) const
70{

Callers

nothing calls this directly

Calls 8

memcpyFunction · 0.85
sizeMethod · 0.45
getMethodByteMethod · 0.45
resizeMethod · 0.45
compressMethod · 0.45
dataMethod · 0.45
swapMethod · 0.45

Tested by

no test coverage detected