std::basic_streambuf<CharT,Traits>::underflow
virtual int_type underflow();
Ensures that at least one character is available in the input area by updating the pointers to the input area (if needed) and reading more data in from the input sequence (if applicable). Returns the value of that character (converted to int_type
with Traits::to_int_type(c)) on success or Traits::eof() on failure.
The function may update gptr
, egptr
and eback
pointers to define the location of newly loaded data (if any). On failure, the function ensures that either gptr() == nullptr or gptr() == egptr.
The base class version of the function does nothing. The derived classes may override this function to allow updates to the get area in the case of exhaustion.
Contents
[edit] Parameters
(none)
[edit] Return value
The value of the character pointed to by the get pointer after the call on success, or Traits::eof() otherwise.
The base class version of the function returns traits::eof().
[edit] Note
The public functions of std::streambuf call this function only if gptr() == nullptr or gptr() >= egptr().
[edit] Example
#include <iostream> #include <sstream> class null_filter_buf : public std::streambuf { std::streambuf * src; char ch; // single-byte buffer protected: int underflow() { traits_type::int_type i; while ((i = src->sbumpc()) == '0円') ; // skip zeroes if (!traits_type::eq_int_type(i, traits_type::eof())) { ch = traits_type::to_char_type(i); setg(&ch, &ch, &ch+1); // make one read position available } return i; } public: null_filter_buf(std::streambuf * buf) : src(buf) { setg(&ch, &ch + 1, &ch + 1); // buffer is initially full } }; void filtered_read(std::istream & in) { std::streambuf * orig = in.rdbuf(); null_filter_buf buf(orig); in.rdbuf(&buf); for (char c; in.get(c);) std::cout << c; in.rdbuf(orig); } int main() { char a[] = "This i0円s 0円an e0円0円0円xample"; std::istringstream in(std::string (std::begin (a), std::end (a))); filtered_read(in); }
Output:
This is an example
[edit] See also
(virtual protected member function) [edit]
(virtual protected member function) [edit]
(virtual protected member function of
std::basic_filebuf<CharT,Traits>
) [edit]
(virtual protected member function of
std::basic_stringbuf<CharT,Traits,Allocator>
) [edit]