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 #ifndef _BSDIFF_BZ2_DECOMPRESSOR_H_ 6*a3a45f30SXin Li #define _BSDIFF_BZ2_DECOMPRESSOR_H_ 7*a3a45f30SXin Li 8*a3a45f30SXin Li #include <bzlib.h> 9*a3a45f30SXin Li 10*a3a45f30SXin Li #include "bsdiff/decompressor_interface.h" 11*a3a45f30SXin Li 12*a3a45f30SXin Li namespace bsdiff { 13*a3a45f30SXin Li 14*a3a45f30SXin Li class BZ2Decompressor : public DecompressorInterface { 15*a3a45f30SXin Li public: 16*a3a45f30SXin Li BZ2Decompressor() = default; 17*a3a45f30SXin Li ~BZ2Decompressor(); 18*a3a45f30SXin Li 19*a3a45f30SXin Li bool SetInputData(const uint8_t* input_data, size_t size) override; 20*a3a45f30SXin Li 21*a3a45f30SXin Li bool Read(uint8_t* output_data, size_t bytes_to_output) override; 22*a3a45f30SXin Li 23*a3a45f30SXin Li bool Close() override; 24*a3a45f30SXin Li 25*a3a45f30SXin Li private: 26*a3a45f30SXin Li // The low-level bzip2 stream. 27*a3a45f30SXin Li bz_stream stream_; 28*a3a45f30SXin Li 29*a3a45f30SXin Li // Whether the stream_ is initialized. 30*a3a45f30SXin Li bool stream_initialized_{false}; 31*a3a45f30SXin Li }; 32*a3a45f30SXin Li 33*a3a45f30SXin Li } // namespace bsdiff 34*a3a45f30SXin Li 35*a3a45f30SXin Li #endif 36