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_PATCH_WRITER_INTERFACE_H_ 6#define _BSDIFF_PATCH_WRITER_INTERFACE_H_ 7 8#include <stddef.h> 9#include <stdint.h> 10 11#include "bsdiff/control_entry.h" 12 13namespace bsdiff { 14 15enum class BsdiffFormat { 16 kLegacy, 17 kBsdf2, 18 kEndsley, 19}; 20 21class PatchWriterInterface { 22 public: 23 virtual ~PatchWriterInterface() = default; 24 25 // Initialize the patch writer for a patch where the new file will have 26 // |new_size| bytes. 27 virtual bool Init(size_t new_size) = 0; 28 29 // Write the passed |data| buffer of length |size| to the Diff or Extra 30 // streams respectively. Each method can be called independently from each 31 // other and calls don't need to be a correlation with the AddControlEntry() 32 // until Close() is called. 33 virtual bool WriteDiffStream(const uint8_t* data, size_t size) = 0; 34 virtual bool WriteExtraStream(const uint8_t* data, size_t size) = 0; 35 36 // Add a new control triplet entry to the patch. These triplets may be added 37 // at any point before calling Close(), regardless of whether the 38 // corresponding WriteDiffStream() and WriteExtraStream() have been called 39 // yet. 40 virtual bool AddControlEntry(const ControlEntry& entry) = 0; 41 42 // Finalize the patch writing process and close the file. 43 virtual bool Close() = 0; 44 45 protected: 46 PatchWriterInterface() = default; 47}; 48 49} // namespace bsdiff 50 51#endif // _BSDIFF_PATCH_WRITER_INTERFACE_H_ 52