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

FreeBSD Manual Pages

  
 
  

home | help
std::basic_streambuf::setg(3) C++ Standard Libarystd::basic_streambuf::setg(3)

NAME
       std::basic_streambuf::setg - std::basic_streambuf::setg

Synopsis
	  protected:
	  void setg( char_type*	gbeg, char_type* gcurr,	char_type* gend	);

	  Sets the values of the pointers defining the get area. Specifically,
       after the call
	  eback() == gbeg, gptr() == gcurr, egptr() == gend

Parameters
	  gbeg	- pointer to the new beginning of the get area
	  gcurr	 -  pointer  to	the new	current	character (get pointer)	in the
       get area
	  gend	- pointer to the new end of the	get area

Return value
	  (none)

Example
       // Run this code

	#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 i\0s \0an e\0\0\0xample";
	    std::istringstream in(std::string(std::begin(a), std::end(a)));
	    filtered_read(in);
	}

Output:
	This is	an example

See also
	  setp repositions the beginning, next,	and end	pointers of the	output
       sequence
	       (protected member function)

http://cppreference.com		  2022.07.31	 std::basic_streambuf::setg(3)

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

home | help