39 #ifndef BLOCXX_DATA_STREAMS_HPP_INCLUDE_GUARD_
40 #define BLOCXX_DATA_STREAMS_HPP_INCLUDE_GUARD_
41 #include "blocxx/BLOCXX_config.h"
43 #if defined(BLOCXX_HAVE_ISTREAM) && defined(BLOCXX_HAVE_OSTREAM)
49 #if defined(BLOCXX_HAVE_STREAMBUF)
51 #elif defined(BLOCXX_HAVE_STREAMBUF_H)
52 #include <streambuf.h>
63 class BLOCXX_COMMON_API DataIStreamBuf :
public std::streambuf
66 DataIStreamBuf(
int dataLen,
const unsigned char* data) :
69 setg(
const_cast<char*
>(
reinterpret_cast<const char*
>(data)),
70 const_cast<char*
>(
reinterpret_cast<const char*
>(data)),
71 const_cast<char*
>(
reinterpret_cast<const char*
>(data+dataLen)));
74 virtual int underflow();
76 virtual pos_type seekoff(off_type off, std::ios_base::seekdir way, std::ios_base::openmode which);
77 virtual pos_type seekpos(pos_type sp, std::ios_base::openmode which);
80 class BLOCXX_COMMON_API DataIStreamBase
83 DataIStreamBase(
int dataLen,
const unsigned char* data) : m_strbuf(dataLen, data) {}
84 DataIStreamBuf m_strbuf;
87 class BLOCXX_COMMON_API DataIStream :
private DataIStreamBase,
public std::istream
90 DataIStream(
int dataLen,
const unsigned char* data)
91 : DataIStreamBase(dataLen, data)
92 ,
std::basic_istream<char,
std::char_traits<char> >(&m_strbuf) {}
99 const unsigned char* getData()
const {
return &m_bfr[0]; }
100 int length()
const {
return m_bfr.size(); }
101 void clear() { m_bfr.clear(); }
103 virtual int overflow(
int c);
104 virtual std::streamsize xsputn(
const char* s, std::streamsize n);
108 #pragma warning (push)
109 #pragma warning (disable: 4251)
112 std::vector<unsigned char> m_bfr;
115 #pragma warning (pop)
124 :
m_buf(initialSize) {}
134 ,
std::basic_ostream<char,
std::char_traits<char> >(&
m_buf)
136 const unsigned char* getData()
const {
return m_buf.getData(); }
137 int length()
const {
return m_buf.length(); }
138 void clearData() {
m_buf.clear(); }