xref: /aosp_15_r20/external/bsdiff/compressor_buffer.cc (revision a3a45f308bd90ef1a6e6a5e8fb92fe449b895909)
1*a3a45f30SXin Li // Copyright 2017 The Chromium OS Authors. All rights reserved.
2*a3a45f30SXin Li // Use of this source code is governed by a BSD-style license that can be
3*a3a45f30SXin Li // found in the LICENSE file.
4*a3a45f30SXin Li 
5*a3a45f30SXin Li #include "bsdiff/compressor_buffer.h"
6*a3a45f30SXin Li 
7*a3a45f30SXin Li #include "bsdiff/logging.h"
8*a3a45f30SXin Li 
9*a3a45f30SXin Li namespace bsdiff {
10*a3a45f30SXin Li 
GetCompressedData()11*a3a45f30SXin Li const std::vector<uint8_t>& CompressorBuffer::GetCompressedData() {
12*a3a45f30SXin Li   if (!comp_chunks_.empty()) {
13*a3a45f30SXin Li     size_t chunks_size = 0;
14*a3a45f30SXin Li     for (const auto& chunk : comp_chunks_)
15*a3a45f30SXin Li       chunks_size += chunk.size();
16*a3a45f30SXin Li     comp_data_.reserve(comp_data_.size() + chunks_size);
17*a3a45f30SXin Li     for (const auto& chunk : comp_chunks_) {
18*a3a45f30SXin Li       comp_data_.insert(comp_data_.end(), chunk.begin(), chunk.end());
19*a3a45f30SXin Li     }
20*a3a45f30SXin Li     comp_chunks_.clear();
21*a3a45f30SXin Li   }
22*a3a45f30SXin Li   return comp_data_;
23*a3a45f30SXin Li }
24*a3a45f30SXin Li 
AddDataToChunks(size_t data_size)25*a3a45f30SXin Li void CompressorBuffer::AddDataToChunks(size_t data_size) {
26*a3a45f30SXin Li   if (data_size > comp_buffer_.size()) {
27*a3a45f30SXin Li     LOG(ERROR) << "data size: " << data_size
28*a3a45f30SXin Li                << " is larger than buffer size: " << comp_buffer_.size();
29*a3a45f30SXin Li     return;
30*a3a45f30SXin Li   }
31*a3a45f30SXin Li   comp_chunks_.emplace_back(comp_buffer_.data(),
32*a3a45f30SXin Li                             comp_buffer_.data() + data_size);
33*a3a45f30SXin Li }
34*a3a45f30SXin Li 
35*a3a45f30SXin Li }  // namespace bsdiff
36