table of contents
std::strstreambuf::underflow(3) | C++ Standard Libary | std::strstreambuf::underflow(3) |
NAME¶
std::strstreambuf::underflow - std::strstreambuf::underflow
Synopsis¶
protected: (deprecated in C++98)
virtual int_type underflow(); (removed in C++26)
Reads the next character from the get area of the buffer.
If the input sequence has a read position available (gptr() < egptr(),
returns
(unsigned char)(*gptr()).
Otherwise, if pptr() is not null and pptr() > egptr() (there is a put area
and it is
located after the get area), extends the end of the get area to include the
characters that were recently written into the put area by incrementing
egptr() to
some value between gptr() and pptr(), and then returns (unsigned
char)(*gptr()).
Otherwise, returns EOF to indicate failure.
Parameters¶
(none)
Return value¶
The next character in the get area, (unsigned char)(*gptr()) on
success, EOF on
failure.
Example¶
// Run this code
#include <iostream>
#include <strstream>
struct mybuf : std::strstreambuf
{
int_type overflow(int_type c)
{
std::cout << "Before overflow(): size of the get area is "
<< egptr()-eback()
<< " size of the put area is " << epptr()-pbase()
<< '\n';
int_type rc = std::strstreambuf::overflow(c);
std::cout << "After overflow(): size of the get area is "
<< egptr()-eback()
<< " size of the put area is " << epptr()-pbase()
<< '\n';
return rc;
}
int_type underflow()
{
std::cout << "Before underflow(): size of the get area is "
<< egptr()-eback()
<< " size of the put area is " << epptr()-pbase()
<< '\n';
int_type ch = std::strstreambuf::underflow();
std::cout << "After underflow(): size of the get area is "
<< egptr()-eback()
<< " size of the put area is " << epptr()-pbase()
<< '\n';
if (ch == EOF)
std::cout << "underflow() returns EOF\n";
else
std::cout << "underflow() returns '" << char(ch)
<< "'\n";
return ch;
}
};
int main()
{
mybuf sbuf; // read-write dynamic strstreambuf
std::iostream stream(&sbuf);
int n;
stream >> n;
stream.clear();
stream << "123";
stream >> n;
std::cout << n << '\n';
}
Possible output:¶
Before underflow(): size of the get area is 0 size of the put
area is 0
After underflow(): size of the get area is 0 size of the put area is 0
underflow() returns EOF
Before overflow(): size of the get area is 0 size of the put area is 0
After overflow(): size of the get area is 0 size of the put area is 32
Before underflow(): size of the get area is 0 size of the put area is 32
After underflow(): size of the get area is 3 size of the put area is 32
underflow() returns '1'
Before underflow(): size of the get area is 3 size of the put area is 32
After underflow(): size of the get area is 3 size of the put area is 32
underflow() returns EOF
123
See also¶
underflow reads characters from the associated input sequence to
the get area
[virtual] (virtual protected member function of
std::basic_streambuf<CharT,Traits>)
underflow returns the next character available in the input sequence
[virtual] (virtual protected member function
of
std::basic_stringbuf<CharT,Traits,Allocator>)
underflow reads from the associated file
[virtual] (virtual protected member function of
std::basic_filebuf<CharT,Traits>)
sgetc reads one character from the input sequence without advancing the
sequence
(public member function of std::basic_streambuf<CharT,Traits>)
get extracts characters
(public member function of std::basic_istream<CharT,Traits>)
2024.06.10 | http://cppreference.com |