30 template <
typename T
char>
class basic_imembuf ;
31 using imembuf = basic_imembuf<char> ;
32 using wimembuf = basic_imembuf<wchar_t> ;
50template <
typename T
char>
58 std::streamsize xsgetn( Tchar * s , std::streamsize n )
override ;
59 std::streampos seekpos( std::streampos pos , std::ios_base::openmode which )
override ;
60 std::streampos seekoff( std::streamoff off , std::ios_base::seekdir way , std::ios_base::openmode which )
override ;
70 template <
typename T
int>
static std::streamsize min( Tint a , std::streamsize b ) ;
77template <
typename T
char>
80 return std::min(
static_cast<std::streamsize
>(a) , b ) ;
83template <
typename T
char>
88 using base_t = std::basic_streambuf<Tchar> ;
89 Tchar * mp =
const_cast<Tchar*
>(m_p) ;
90 base_t::setg( mp , mp , mp+m_n ) ;
93template <
typename T
char>
96 using base_t = std::basic_streambuf<Tchar> ;
97 Tchar * gp = base_t::gptr() ;
98 std::streamsize n = min( m_p+m_n-gp , n_in ) ;
101 std::copy( gp , gp+n , s ) ;
102 base_t::gbump(
static_cast<int>(n) ) ;
107template <
typename T
char>
110 using base_t = std::basic_streambuf<Tchar> ;
111 if( ( which & std::ios_base::in ) && pos_in > 0 )
113 Tchar * mp =
const_cast<Tchar*
>(m_p) ;
114 int pos =
static_cast<int>(pos_in) ;
115 Tchar * p = std::min( mp+pos , mp+m_n ) ;
116 base_t::setg( mp , p , mp+m_n ) ;
125template <
typename T
char>
128 using base_t = std::basic_streambuf<Tchar> ;
129 if( which & std::ios_base::in )
131 Tchar * gp = base_t::gptr() ;
132 Tchar * mp =
const_cast<Tchar*
>(m_p) ;
133 if( way == std::ios_base::beg )
134 gp = std::max( mp , std::min(mp+off,mp+m_n) ) ;
135 else if( way == std::ios_base::cur )
136 gp = std::max( mp , std::min(gp+off,mp+m_n) ) ;
138 gp = std::max( mp , std::min(mp+m_n+off,mp+m_n) ) ;
139 base_t::setg( mp , gp , mp+m_n ) ;
140 return std::streamoff(gp-mp) ;
An input streambuf that takes its data from a fixed-size const buffer.
basic_imembuf(const Tchar *p, std::size_t n)
Constructor.