diff options
author | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /util/stream/null.h |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'util/stream/null.h')
-rw-r--r-- | util/stream/null.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/util/stream/null.h b/util/stream/null.h new file mode 100644 index 00000000000..8c335a9a789 --- /dev/null +++ b/util/stream/null.h @@ -0,0 +1,61 @@ +#pragma once + +#include "zerocopy.h" +#include "output.h" + +/** + * @addtogroup Streams + * @{ + */ + +/** + * Null input stream. Does nothing, contains no data. + */ +class TNullInput: public IZeroCopyInput { +public: + TNullInput() noexcept; + ~TNullInput() override; + +private: + size_t DoRead(void* buf, size_t len) override; + size_t DoSkip(size_t len) override; + size_t DoNext(const void** ptr, size_t len) override; +}; + +/** + * Null output stream. Just ignores whatever is written into it. + */ +class TNullOutput: public IOutputStream { +public: + TNullOutput() noexcept; + ~TNullOutput() override; + + TNullOutput(TNullOutput&&) noexcept = default; + TNullOutput& operator=(TNullOutput&&) noexcept = default; + +private: + void DoWrite(const void* buf, size_t len) override; +}; + +/** + * Null input-output stream. + * + * @see TNullInput + * @see TNullOutput + */ +class TNullIO: public TNullInput, public TNullOutput { +public: + TNullIO() noexcept; + ~TNullIO() override; +}; + +namespace NPrivate { + TNullIO& StdNullStream() noexcept; +} + +/** + * Standard null stream. + */ +#define Cnull (::NPrivate::StdNullStream()) + +/** @} */ |