4#ifndef _Stroika_Foundation_Streams_BufferedInputStream_h_ 
    5#define _Stroika_Foundation_Streams_BufferedInputStream_h_ 1 
    7#include "Stroika/Foundation/StroikaPreComp.h" 
   23namespace Stroika::Foundation::Streams::BufferedInputStream {
 
   25    template <
typename ELEMENT_TYPE>
 
   60    template <
typename ELEMENT_TYPE>
 
   62    template <
typename ELEMENT_TYPE>
 
   64                           optional<Streams::SeekableFlag> seekable = {});
 
   67        template <
typename ELEMENT_TYPE>
 
   68        class IRep_ : 
public InputStream::IRep<ELEMENT_TYPE> {
 
   71        template <
typename ELEMENT_TYPE>
 
   72        class Rep_Seekable_FromSeekable_;
 
   73        template <
typename ELEMENT_TYPE, 
size_t INLINE_BUF_SIZE>
 
   74        class Rep_Seekable_FromUnSeekable_;
 
   75        template <
typename ELEMENT_TYPE, 
size_t INLINE_BUF_SIZE>
 
   76        class Rep_UnSeekable_;
 
   82    template <
typename ELEMENT_TYPE>
 
   94        Ptr (
const Ptr& from) = 
default;
 
   95        Ptr (
Ptr&& from)      = 
default;
 
   96        Ptr (
const shared_ptr<Private_::IRep_<ELEMENT_TYPE>>& from);
 
   99        nonvirtual 
Ptr& operator= (
const Ptr& rhs) = 
default;
 
  100        nonvirtual 
Ptr& operator= (
Ptr&& rhs)      = 
default;
 
  106        nonvirtual shared_ptr<Private_::IRep_<ELEMENT_TYPE>> GetSharedRep_ () 
const;
 
 
  116#include "BufferedInputStream.inl" 
A Streams::Ptr<ELEMENT_TYPE> is a smart-pointer to a stream of elements of type T.