// Copyright 2017 The Chromium OS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef _BSDIFF_BZ2_COMPRESSOR_H_ #define _BSDIFF_BZ2_COMPRESSOR_H_ #include <bzlib.h> #include <stdint.h> #include <vector> #include "bsdiff/compressor_buffer.h" #include "bsdiff/compressor_interface.h" namespace bsdiff { // An in-memory class to wrap the low-level bzip2 compress functions. This class // allows to stream uncompressed data to it and then retrieve all the compressed // data at the end of the compression step. For that, all the compressed data // is stored in memory. class BZ2Compressor : public CompressorInterface { public: BZ2Compressor(); ~BZ2Compressor() override; // CompressorInterface overrides. bool Write(const uint8_t* buf, size_t size) override; bool Finish() override; const std::vector<uint8_t>& GetCompressedData() override; CompressorType Type() const override { return CompressorType::kBZ2; } private: // The low-level bzip2 stream. bz_stream bz_strm_; // Whether the bz_strm_ is initialized. bool bz_strm_initialized_{false}; CompressorBuffer comp_buffer_; }; } // namespace bsdiff #endif // _BSDIFF_BZ2_COMPRESSOR_H_