41      public std::basic_streambuf<char>
 
   44      typedef std::basic_streambuf<char> base_class;
 
   45      typedef typename base_class::traits_type traits_type;
 
   46      typedef std::vector<char>::size_type datasize;
 
   47      typedef std::streamsize streamsize;
 
   50      std::vector<char> _data;
 
   60      streamsize size()
 const 
   62        return streamsize(_data.size());
 
   68        _data_pos = datasize(0);
 
   76      const char* data()
 const 
   81      std::vector<char>& container()
 
   86      const std::vector<char>& container()
 const 
   92      virtual std::streamsize xsputn(
const char* ptr, std::streamsize count)
 override 
   97        if(_data_pos + datasize(count) > _data.size())
 
   98          _data.resize(_data_pos + datasize(count));
 
  101        for(; copied < count; ++_data_pos, ++copied, ++ptr)
 
  102          _data[_data_pos] = *ptr;
 
  107      virtual std::streamsize xsgetn(
char* ptr, std::streamsize count)
 override 
  109        streamsize copied(0);
 
  110        datasize len(_data.size());
 
  113        if(_data_pos + datasize(count) > len)
 
  114          count = streamsize(len - _data_pos);
 
  117        for(; copied < count; ++_data_pos, ++copied, ++ptr)
 
  118          *ptr = _data[_data_pos];
 
  123      virtual pos_type seekoff(
 
  125        std::ios_base::seekdir way,
 
  126        std::ios_base::openmode which = std::ios_base::in | std::ios_base::out)
 override 
  128        if((which & (std::ios_base::in|std::ios_base::out)) == 0)
 
  133        case std::ios_base::beg:
 
  134          if((off < 0) || (off > off_type(_data.size())))
 
  136          return pos_type(std::streamoff(_data_pos = datasize(off)));
 
  138        case std::ios_base::cur:
 
  139          if((off < 0) && (-off > off_type(_data_pos)))
 
  141          if((off > 0) && (off_type(_data_pos) + off > off_type(_data.size())))
 
  143          return pos_type(std::streamoff(_data_pos = datasize(off_type(_data_pos) + off)));
 
  145        case std::ios_base::end:
 
  146          if((off > 0) || (-off > off_type(_data.size())))
 
  148          return pos_type(std::streamoff(_data_pos = datasize(off_type(_data.size()) + off)));
 
  155      virtual pos_type seekpos(
 
  157        std::ios_base::openmode which = std::ios_base::in | std::ios_base::out)
 override 
  159        if((which & (std::ios_base::in|std::ios_base::out)) == 0)
 
  163        if (pos >= pos_type(std::streamoff(_data.size())))
 
  167        return pos_type(std::streamoff(_data_pos = datasize(pos)));
 
  170      virtual int overflow(
int c = EOF)
 override 
  176        const char cc = traits_type::to_char_type(c);
 
  182        return traits_type::to_int_type(cc);
 
  188    BinaryBuffer _buffer;
 
  193      std::iostream(&_buffer)
 
  203      return _buffer.size();
 
  220      return _buffer.data();
 
  229      return _buffer.data();
 
  238      return _buffer.container();
 
  247      return _buffer.container();
 
  265      is.seekg(std::streamoff(0), std::ios_base::end);
 
  268      const std::streampos filesize = is.tellg();
 
  271      is.seekg(std::streamoff(0), std::ios_base::beg);
 
  274      std::vector<char>& content = _buffer.container();
 
  277      content.resize(std::size_t(filesize));
 
  280      is.read(content.data(), filesize);
 
std::vector< char > & container()
Returns a reference to the internal vector container.
char * data()
Returns the data array of the stream.
const char * data() const
Returns the data array of the stream.
BinaryStream()
default CTOR
void read_stream(std::istream &is)
Reads the content of a binary input stream.
std::streamsize size() const
Returns the current size of the stream.
void clear()
Clears the current stream.
void write_stream(std::ostream &os) const
Writes the content to a binary output stream.
const std::vector< char > & container() const
Returns a reference to the internal vector container.