FreeBSD Manual Pages
std::basic_...f::overflow(3) C++ Standard Libary std::basic_...f::overflow(3) NAME std::basic_stringbuf::overflow - std::basic_stringbuf::overflow Synopsis protected: virtual int_type overflow( int_type c = Traits::eof() ); Appends the character c to the output character sequence. If c is the end-of-file indicator (traits::eq_int_type(c, traits::eof()) == true), then there is no character to append. The function does nothing and returns an unspecified value other than traits::eof(). Otherwise, if the output sequence has a write position available or this function can successfully make a write position available, then calls sputc(c) and returns c. This function can make a write position available if the std::stringbuf is open for output ((mode & ios_base::out) != 0): in this case, it reallocates (or initially allocates) the buffer big enough to hold the entire current buffer plus at least one more character. If the std::stringbuf is also open for input ((mode & ios_base::in) != 0), then overflow also increases the size of the get area by mov- ing egptr() to point just past the new write position. Parameters c - the character to store in the put area Return value Traits::eof() to indicate failure, c if the character c was success- fully appended, or some value other than Traits::eof() if called with Traits::eof() as the argument. Notes This function is different from a typical overflow() which moves the contents of the buffer to the associated character sequence because for a std::ba- sic_stringbuf, the buffer and the associated sequence are one and the same. Example In the implementation used to execute this example (e.g. GCC-4.9), overflow() over-allocates the put area to 512 bytes: a call to str() would only return the four initialized bytes, but the next 508 calls to sputc() would not re- quire new calls to overflow(). // Run this code #include <sstream> #include <iostream> struct mybuf : std::stringbuf { mybuf(const std::string& new_str, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) : std::stringbuf(new_str, which) {} int_type overflow(int_type c = EOF) override { std::cout << "stringbuf::overflow('" << char(c) << "') called\n" << "Before: size of get area: " << egptr() - eback() << '\n' << " size of put area: " << epptr() - pbase() << '\n'; int_type ret = std::stringbuf::overflow(c); std::cout << "After : size of get area: " << egptr() - eback() << '\n' << " size of put area: " << epptr() - pbase() << '\n'; return ret; } }; int main() { std::cout << "read-write stream:\n"; mybuf sbuf(" "); // read-write stream std::iostream stream(&sbuf); stream << 1234; std::cout << sbuf.str() << '\n'; std::cout << "\nread-only stream:\n"; mybuf ro_buf(" ", std::ios_base::in); // read-only stream std::iostream ro_stream(&ro_buf); ro_stream << 1234; std::cout << "\nwrite-only stream:\n"; mybuf wr_buf(" ", std::ios_base::out); // write-only stream std::iostream wr_stream(&wr_buf); wr_stream << 1234; } Possible output: read-write stream: stringbuf::overflow('4') called Before: size of get area: 3 size of put area: 3 After : size of get area: 4 size of put area: 512 1234 read-only stream: stringbuf::overflow('1') called Before: size of get area: 3 size of put area: 0 After : size of get area: 3 size of put area: 0 write-only stream: stringbuf::overflow('4') called Before: size of get area: 0 size of put area: 3 After : size of get area: 0 size of put area: 512 Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior LWG 169 C++98 the buffer (re)allocated could only hold one allows more extra extra character characters overflow moved epptr() to point just past the LWG 432 C++98 new it is not moved write position if the std::stringbuf is open for input See also overflow writes characters to the associated output sequence from the put area [virtual] (virtual protected member function of std::basic_stream- buf<CharT,Traits>) underflow returns the next character available in the input sequence [virtual] (virtual protected member function) http://cppreference.com 2024.06.10 std::basic_...f::overflow(3)
NAME | Synopsis | Parameters | Return value | Notes | Example | Possible output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::basic_stringbuf::overflow&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
