| 81 | } |
| 82 | |
| 83 | Status RunCompressedInputStream(Codec* codec, std::shared_ptr<Buffer> compressed, |
| 84 | int64_t* stream_pos, std::vector<uint8_t>* out) { |
| 85 | // Create compressed input stream |
| 86 | auto buffer_reader = std::make_shared<BufferReader>(compressed); |
| 87 | ARROW_ASSIGN_OR_RAISE(auto stream, CompressedInputStream::Make(codec, buffer_reader)); |
| 88 | |
| 89 | std::vector<uint8_t> decompressed; |
| 90 | int64_t decompressed_size = 0; |
| 91 | const int64_t chunk_size = 1111; |
| 92 | while (true) { |
| 93 | ARROW_ASSIGN_OR_RAISE(auto buf, stream->Read(chunk_size)); |
| 94 | if (buf->size() == 0) { |
| 95 | // EOF |
| 96 | break; |
| 97 | } |
| 98 | decompressed.resize(decompressed_size + buf->size()); |
| 99 | memcpy(decompressed.data() + decompressed_size, buf->data(), buf->size()); |
| 100 | decompressed_size += buf->size(); |
| 101 | } |
| 102 | if (stream_pos != nullptr) { |
| 103 | RETURN_NOT_OK(stream->Tell().Value(stream_pos)); |
| 104 | } |
| 105 | *out = std::move(decompressed); |
| 106 | return Status::OK(); |
| 107 | } |
| 108 | |
| 109 | Status RunCompressedInputStream(Codec* codec, std::shared_ptr<Buffer> compressed, |
| 110 | std::vector<uint8_t>* out) { |