| // 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_PATCH_WRITER_INTERFACE_H_ |
| #define _BSDIFF_PATCH_WRITER_INTERFACE_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| #include "bsdiff/control_entry.h" |
| |
| namespace bsdiff { |
| |
| enum class BsdiffFormat { |
| kLegacy, |
| kBsdf2, |
| kEndsley, |
| }; |
| |
| class PatchWriterInterface { |
| public: |
| virtual ~PatchWriterInterface() = default; |
| |
| // Initialize the patch writer for a patch where the new file will have |
| // |new_size| bytes. |
| virtual bool Init(size_t new_size) = 0; |
| |
| // Write the passed |data| buffer of length |size| to the Diff or Extra |
| // streams respectively. Each method can be called independently from each |
| // other and calls don't need to be a correlation with the AddControlEntry() |
| // until Close() is called. |
| virtual bool WriteDiffStream(const uint8_t* data, size_t size) = 0; |
| virtual bool WriteExtraStream(const uint8_t* data, size_t size) = 0; |
| |
| // Add a new control triplet entry to the patch. These triplets may be added |
| // at any point before calling Close(), regardless of whether the |
| // corresponding WriteDiffStream() and WriteExtraStream() have been called |
| // yet. |
| virtual bool AddControlEntry(const ControlEntry& entry) = 0; |
| |
| // Finalize the patch writing process and close the file. |
| virtual bool Close() = 0; |
| |
| protected: |
| PatchWriterInterface() = default; |
| }; |
| |
| } // namespace bsdiff |
| |
| #endif // _BSDIFF_PATCH_WRITER_INTERFACE_H_ |