MCPcopy Create free account
hub / github.com/apache/arrow / StreamingCompress

Function StreamingCompress

cpp/src/arrow/util/compression_benchmark.cc:67–113  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

65}
66
67int64_t StreamingCompress(Codec* codec, const std::vector<uint8_t>& data,
68 std::vector<uint8_t>* compressed_data = nullptr) {
69 if (compressed_data != nullptr) {
70 compressed_data->clear();
71 compressed_data->shrink_to_fit();
72 }
73 auto compressor = *codec->MakeCompressor();
74
75 const uint8_t* input = data.data();
76 int64_t input_len = data.size();
77 int64_t compressed_size = 0;
78
79 std::vector<uint8_t> output_buffer(1 << 20); // 1 MB
80
81 while (input_len > 0) {
82 auto result = *compressor->Compress(input_len, input, output_buffer.size(),
83 output_buffer.data());
84 input += result.bytes_read;
85 input_len -= result.bytes_read;
86 compressed_size += result.bytes_written;
87 if (compressed_data != nullptr && result.bytes_written > 0) {
88 compressed_data->resize(compressed_data->size() + result.bytes_written);
89 memcpy(compressed_data->data() + compressed_data->size() - result.bytes_written,
90 output_buffer.data(), result.bytes_written);
91 }
92 if (result.bytes_read == 0) {
93 // Need to enlarge output buffer
94 output_buffer.resize(output_buffer.size() * 2);
95 }
96 }
97 while (true) {
98 auto result = *compressor->End(output_buffer.size(), output_buffer.data());
99 compressed_size += result.bytes_written;
100 if (compressed_data != nullptr && result.bytes_written > 0) {
101 compressed_data->resize(compressed_data->size() + result.bytes_written);
102 memcpy(compressed_data->data() + compressed_data->size() - result.bytes_written,
103 output_buffer.data(), result.bytes_written);
104 }
105 if (result.should_retry) {
106 // Need to enlarge output buffer
107 output_buffer.resize(output_buffer.size() * 2);
108 } else {
109 break;
110 }
111 }
112 return compressed_size;
113}
114
115static void StreamingCompression(Compression::type compression,
116 const std::vector<uint8_t>& data,

Callers 2

StreamingCompressionFunction · 0.85
StreamingDecompressionFunction · 0.85

Calls 7

resizeMethod · 0.80
clearMethod · 0.45
MakeCompressorMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45
CompressMethod · 0.45
EndMethod · 0.45

Tested by

no test coverage detected