1 // Copyright 2017 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef _BSDIFF_DECOMPRESSOR_INTERFACE_H_ 6 #define _BSDIFF_DECOMPRESSOR_INTERFACE_H_ 7 8 #include <stddef.h> 9 #include <stdint.h> 10 11 #include <memory> 12 13 #include "bsdiff/constants.h" 14 15 namespace bsdiff { 16 17 class DecompressorInterface { 18 public: ~DecompressorInterface()19 virtual ~DecompressorInterface() {} 20 21 // Set the buffer starting from |input_data| with length |size| as the input 22 // compressed stream. This buffer is owned by the caller and should stay 23 // valid until the Close() function is called. 24 virtual bool SetInputData(const uint8_t* input_data, size_t size) = 0; 25 26 // Decompress the stream and output |bytes_to_output| bytes of data to 27 // |output_data|. Returns false if not all bytes_to_output can be 28 // decompressed from the stream due to a decompressor error or EOF. 29 virtual bool Read(uint8_t* output_data, size_t bytes_to_output) = 0; 30 31 // Close the decompression stream. 32 virtual bool Close() = 0; 33 }; 34 35 std::unique_ptr<DecompressorInterface> CreateDecompressor(CompressorType type); 36 37 } // namespace bsdiff 38 #endif // _BSDIFF_DECOMPRESSOR_INTERFACE_H_ 39