123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #pragma once
- #include <util/system/yassert.h>
- #include "output.h"
- class IZeroCopyOutput: public IOutputStream {
- public:
- IZeroCopyOutput() noexcept = default;
- ~IZeroCopyOutput() override = default;
- IZeroCopyOutput(IZeroCopyOutput&&) noexcept = default;
- IZeroCopyOutput& operator=(IZeroCopyOutput&&) noexcept = default;
-
- template <class T>
- inline size_t Next(T** ptr) {
- Y_ASSERT(ptr);
- return DoNext((void**)ptr);
- }
-
- inline void Undo(size_t len) {
- return DoUndo(len);
- }
- protected:
- void DoWrite(const void* buf, size_t len) override;
- virtual size_t DoNext(void** ptr) = 0;
- virtual void DoUndo(size_t len) = 0;
- };
|