Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::strstr...::underflow(3)  C++ Standard Libary std::strstr...::underflow(3)

NAME
       std::strstreambuf::underflow - std::strstreambuf::underflow

Synopsis
	  protected:
	  virtual int_type underflow();

	  Reads	the next character from	the get	area of	the buffer.

	  If  the  input  sequence has a read position available (gptr() < eg-
       ptr(), 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 in-
       clude the
	  characters that were recently	written	into the put  area  by	incre-
       menting 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 suc-
       cess, EOF on
	  failure

Example
       // Run this code

	#include <strstream>
	#include <iostream>

	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_stream-
       buf<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_file-
       buf<CharT,Traits>)
	  sgetc	    reads one character	from the input	sequence  without  ad-
       vancing the sequence
		    (public	member	  function    of    std::basic_stream-
       buf<CharT,Traits>)
	  get	    extracts characters
		    (public	 member	      function	     of	      std::ba-
       sic_istream<CharT,Traits>)

http://cppreference.com		  2022.07.31	  std::strstr...::underflow(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::strstreambuf::underflow&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help