diff options
Diffstat (limited to 'sink_file.h')
-rw-r--r-- | sink_file.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/sink_file.h b/sink_file.h new file mode 100644 index 0000000..b2ce33f --- /dev/null +++ b/sink_file.h @@ -0,0 +1,41 @@ +// 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_SINK_FILE_H_ +#define _BSDIFF_SINK_FILE_H_ + +#include <stdint.h> + +#include <functional> + +#include "file_interface.h" + +using sink_func = std::function<size_t(const uint8_t*, size_t)>; + +namespace bsdiff { + +class SinkFile : public FileInterface { + public: + // Creates a SinkFile based on the underlying |sink| function passed. + // The SinkFile will call |sink| function upon write. + // Read, Seek and GetSize are not supported. + explicit SinkFile(const sink_func& sink); + + ~SinkFile() = default; + + // 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 sink() function used to write data. + const sink_func& sink_; +}; + +} // namespace bsdiff + +#endif // _BSDIFF_SINK_FILE_H_ |