4#ifndef _Stroika_Foundation_Streams_BufferedOutputStream_h_
5#define _Stroika_Foundation_Streams_BufferedOutputStream_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
24namespace Stroika::Foundation::Streams::BufferedOutputStream {
26 template <
typename ELEMENT_TYPE>
47 template <
typename ELEMENT_TYPE>
48 Ptr<ELEMENT_TYPE> New (
const typename OutputStream::Ptr<ELEMENT_TYPE>& realOut,
const optional<size_t>& bufferSize = nullopt);
49 template <
typename ELEMENT_TYPE>
51 const typename OutputStream::Ptr<ELEMENT_TYPE>& realOut,
const optional<size_t>& bufferSize = nullopt);
54 template <
typename ELEMENT_TYPE>
55 class IRep_ :
public OutputStream::IRep<ELEMENT_TYPE> {
57 virtual size_t GetBufferSize ()
const = 0;
58 virtual void SetBufferSize (
size_t bufSize) = 0;
60 template <
typename ELEMENT_TYPE,
size_t INLINE_BUF_SIZE = 16 * 1024>
67 template <
typename ELEMENT_TYPE>
79 Ptr (
const Ptr& from) =
default;
80 Ptr (
Ptr&& from) =
default;
81 Ptr (
const shared_ptr<Private_::IRep_<ELEMENT_TYPE>>& from);
84 nonvirtual
Ptr& operator= (
const Ptr& rhs) =
default;
85 nonvirtual
Ptr& operator= (
Ptr&& rhs) =
default;
88 nonvirtual
size_t GetBufferSize ()
const;
91 nonvirtual
void SetBufferSize (
size_t bufSize);
103 nonvirtual
void Abort ();
109 nonvirtual shared_ptr<Private_::IRep_<ELEMENT_TYPE>> GetSharedRep_ ()
const;
119#include "BufferedOutputStream.inl"
OutputStream<>::Ptr is Smart pointer to a stream-based sink of data.