| // Copyright 2016 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_BUFFER_FILE_H_ | 
 | #define _BSDIFF_BUFFER_FILE_H_ | 
 |  | 
 | #include <memory> | 
 | #include <vector> | 
 |  | 
 | #include "bsdiff/file_interface.h" | 
 |  | 
 | namespace bsdiff { | 
 |  | 
 | class BufferFile : public FileInterface { | 
 |  public: | 
 |   // Creates a write only BufferFile based on the underlying |file| passed. | 
 |   // The BufferFile will cache all the write in a buffer and write everything | 
 |   // to |file| at once upon closing. Read and Seek are not supported. | 
 |   // |size| should be the estimated total file size, it is used to reserve | 
 |   // buffer space. | 
 |   BufferFile(std::unique_ptr<FileInterface> file, size_t size); | 
 |  | 
 |   ~BufferFile() override; | 
 |  | 
 |   // FileInterface overrides. | 
 |   bool Read(void* buf, size_t count, size_t* bytes_read) override; | 
 |   bool Write(const void* buf, size_t count, size_t* bytes_written) override; | 
 |   bool Seek(off_t pos) override; | 
 |   bool Close() override; | 
 |   bool GetSize(uint64_t* size) override; | 
 |  | 
 |  private: | 
 |   // The underlying FileInterace instance. | 
 |   std::unique_ptr<FileInterface> file_ = nullptr; | 
 |   std::vector<uint8_t> buffer_; | 
 | }; | 
 |  | 
 | }  // namespace bsdiff | 
 |  | 
 | #endif  // _BSDIFF_BUFFER_FILE_H_ |