| 182 | */ |
| 183 | template <class TSlave> |
| 184 | class TBuffered: private TEmbedPolicy<TSlave>, public ::NPrivate::TBufferedStreamFor<TSlave>::TResult { |
| 185 | using TSlaveBase = TEmbedPolicy<TSlave>; |
| 186 | using TBufferedBase = typename ::NPrivate::TBufferedStreamFor<TSlave>::TResult; |
| 187 | |
| 188 | public: |
| 189 | template <typename... Args> |
| 190 | inline TBuffered(size_t b, Args&&... args) |
| 191 | : TSlaveBase(std::forward<Args>(args)...) |
| 192 | , TBufferedBase(TSlaveBase::Ptr(), b) |
| 193 | { |
| 194 | } |
| 195 | |
| 196 | inline TSlave& Slave() noexcept { |
| 197 | return *this->Ptr(); |
| 198 | } |
| 199 | |
| 200 | TBuffered(const TBuffered&) = delete; |
| 201 | TBuffered& operator=(const TBuffered&) = delete; |
| 202 | TBuffered(TBuffered&&) = delete; |
| 203 | TBuffered& operator=(TBuffered&&) = delete; |
| 204 | }; |
| 205 | |
| 206 | /** |
| 207 | * A mixin class that turns unbuffered stream into an adaptively buffered one. |