<HTML>
<HEAD>
<TITLE>basic_stringbuf</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="basic-string.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="basic-stringstream.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library Reference Guide</B></DIV>
<H2>basic_stringbuf</H2>
<P><B>Library:</B>&nbsp;&nbsp;<A HREF="2-11.html">Input/output</A></P>

<PRE><HR><B><I>basic_stringbuf</I></B> <IMG SRC="images/inherits.gif"> <B><I><A HREF="basic-streambuf.html">basic_streambuf</A></I></B><HR></PRE>

<UL>
<LI><A HREF="#sec1">Local Index</A></LI>
<LI><A HREF="#sec2">Summary</A></LI>
<LI><A HREF="#sec3">Synopsis</A></LI>
<LI><A HREF="#sec4">Description</A></LI>
<LI><A HREF="#sec5">Interface</A></LI>
<LI><A HREF="#sec6">Member Types</A></LI>
<LI><A HREF="#sec7">Nonmember Types</A></LI>
<LI><A HREF="#sec8">Constructors</A></LI>
<LI><A HREF="#sec9">Member Functions</A></LI>
<LI><A HREF="#sec10">Example</A></LI>
<LI><A HREF="#sec11">See Also</A></LI>
<LI><A HREF="#sec12">Standards Conformance</A></LI>
</UL>
<A NAME="sec1"><H3>Local Index</H3></A>
<H4>Members</H4>
<UL><TABLE CELLPADDING=3>
<TR><TD VALIGN=top>
<A HREF="#idx398">basic_stringbuf()</A><BR>
<A HREF="#idx391">char_type</A><BR>
<A HREF="#idx392">ios_type</A><BR>
<A HREF="#idx393">off_type</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx400">overflow()</A><BR>
<A HREF="#idx401">pbackfail()</A><BR>
<A HREF="#idx394">pos_type</A><BR>
<A HREF="#idx402">seekoff()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx403">seekpos()</A><BR>
<A HREF="#idx404">setbuf()</A><BR>
<A HREF="#idx405">str()</A><BR>
<A HREF="#idx395">traits_type</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx407">underflow()</A><BR>
<A HREF="#idx408">xsputn()</A><BR>
</TD></TR>
</TABLE></UL>
<H4>Non-Members</H4>
<UL><TABLE CELLPADDING=3>
<TR><TD VALIGN=top>
<A HREF="#idx396">stringbuf</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx397">wstringbuf</A><BR>
</TD>
<TD VALIGN=top></TD></TR>
</TABLE></UL>

<A NAME="sec2"><H3>Summary</H3></A>
<P>Class that associates the input or output sequence with a sequence of arbitrary characters</P>
<A NAME="sec3"><H3>Synopsis</H3></A>

<PRE>#include &lt;sstream&gt; 

namespace std {
  template&lt;class charT, class traits = char_traits&lt;charT&gt;,
           class Allocator = allocator&lt;charT&gt; &gt;
  class basic_stringbuf;
}
</PRE>
<A NAME="sec4"><H3>Description</H3></A>
<P>The class <B><I>basic_stringbuf</I></B> is derived from <B><I><A HREF="basic-streambuf.html">basic_streambuf</A></I></B>. Its purpose is to associate the input or output sequence with a sequence of arbitrary characters. The sequence can be initialized from, or made available as, an object of class <B><I><A HREF="basic-string.html">basic_string</A></I></B>. Each object of type <B><I>basic_stringbuf</I></B> controls two character sequences:</P>
<UL>
<LI><P CLASS="LIST">a character input sequence</P></LI>
<LI><P CLASS="LIST">a character output sequence</P></LI>
</UL>
<P>See <B><I><A HREF="basic-streambuf.html">basic_streambuf</A></I></B> for more information.</P>
<P>The two sequences are related to each other, but are manipulated separately. This allows you to read and write characters at different positions in objects of type <B><I>basic_stringbuf</I></B> without any conflict (as opposed to the <B><I><A HREF="basic-filebuf.html">basic_filebuf</A></I></B> objects, in which a joint file position is maintained).</P>
<A NAME="sec5"><H3>Interface</H3></A>

<UL><PRE>namespace std {
 
  template&lt;class charT, class traits = char_traits&lt;charT&gt;,
           class allocator&lt;charT&gt; &gt;
  class basic_stringbuf 
  : public basic_streambuf&lt;charT, traits&gt; 
  {
    public:

     typedef charT                        char_type;
     typedef typename traits::int_type    int_type;
     typedef typename traits::pos_type    pos_type;
     typedef typename traits::off_type    off_type;

     explicit basic_stringbuf(ios_base::openmode =
                                (ios_base::in | ios_base::out));
     
   explicit basic_stringbuf(const basic_string&lt;char_type,
                            traits_type, Allocator&gt;&amp;,
                            ios_base::openmode = 
                            ios_base::in | ios_base::out);     
   basic_string&lt;char_type, traits_type, Allocator&gt; str() const;    
   void str(const basic_string&lt;char_type, traits_type, Allocator&gt;&amp;);

   protected:

   virtual int_type underflow();
   virtual int_type pbackfail(int_type = traits::eof());
   virtual int_type overflow(int_type = traits::eof());
   virtual basic_streambuf&lt;char_type, traits_type&gt;* 
   setbuf(char_type*,streamsize); 
   virtual pos_type seekoff(off_type, ios_base::seekdir,  
             ios_base::openmode = ios_base::in | ios_base::out);
   virtual pos_type seekpos(pos_type, 
             ios_base::openmode = ios_base::in | ios_base::out);
   virtual streamsize xsputn(const char_type*, streamsize); 
  };
}
</PRE></UL>
<A NAME="sec6"><H3>Member Types</H3></A>

<A NAME="idx391"></A><PRE><B>char_type</B></PRE>
<UL>
<P>The type <SAMP>char_type</SAMP> is a synonym for the template parameter <SAMP>charT</SAMP>.</P>
</UL>


<A NAME="idx392"></A><PRE><B>ios_type</B></PRE>
<UL>
<P>The type <SAMP>ios_type</SAMP> is an instantiation of class <B><I><A HREF="basic-ios.html">basic_ios</A></I></B> on type <SAMP>charT</SAMP>.</P>
</UL>


<A NAME="idx393"></A><PRE><B>off_type</B></PRE>
<UL>
<P>The type <SAMP>off_type</SAMP> is a synonym of type <SAMP>traits::off_type</SAMP>.</P>
</UL>


<A NAME="idx394"></A><PRE><B>pos_type</B></PRE>
<UL>
<P>The type <SAMP>pos_type</SAMP> is a synonym of type <SAMP>traits::pos_type</SAMP>.</P>
</UL>


<A NAME="idx395"></A><PRE><B>traits_type</B></PRE>
<UL>
<P>The type <SAMP>traits_type</SAMP> is a synonym for the template parameter <SAMP>traits</SAMP>.</P>
</UL>

<A NAME="sec7"><H3>Nonmember Types</H3></A>

<A NAME="idx396"></A><PRE><B>stringbuf</B> </PRE>
<UL>
<P>The type <SAMP>stringbuf</SAMP> is a specialization of class template <SAMP>basic_stringbuf</SAMP> on type <SAMP>char</SAMP>:</P>
<P><SAMP>typedef basic_stringbuf&lt;char&gt; stringbuf;</SAMP></P>
</UL>


<A NAME="idx397"></A><PRE><B>wstringbuf</B></PRE>
<UL>
<P>The type <SAMP>wstringbuf</SAMP> is a specialization of class template  <SAMP>basic_stringbuf</SAMP> on type <SAMP>wchar_t</SAMP>:</P>
<P><SAMP>typedef basic_stringbuf&lt;wchar_t&gt; wstringbuf;</SAMP></P>
</UL>

<A NAME="sec8"><H3>Constructors</H3></A>

<A NAME="idx398"></A><PRE>explicit <B>basic_stringbuf</B>(ios_base::openmode which =
                ios_base::in | ios_base::out); </PRE>
<UL>
<P>Constructs an object of class <B><I>basic_stringbuf</I></B>, initializing the base class with <SAMP>basic_streambuf()</SAMP>, and initializing the open mode with <SAMP>which</SAMP>.</P>
</UL>


<A NAME="idx399"></A><PRE>explicit <B>basic_stringbuf</B>(const string_type&amp; str,
                ios_base::openmode which =
                ios_base::in | ios_base::out); </PRE>
<UL>
<P>Constructs an object of class <B><I>basic_stringbuf</I></B>, initializing the base class with <SAMP>basic_streambuf()</SAMP>, and initializing the open mode with <SAMP>which</SAMP>. The string object <SAMP>str</SAMP> is copied to the underlying buffer. </P>
</UL>

<UL>
<LI><P CLASS="LIST">If the opening mode is <SAMP>in</SAMP>, initializes the input sequence to point to the first character of the buffer. </P></LI>
<LI><P CLASS="LIST">If the opening mode is <SAMP>out</SAMP>, initializes the output sequence to point to the first character of the buffer. </P></LI>
<LI><P CLASS="LIST">If the opening mode is <SAMP>out&nbsp;|&nbsp;app</SAMP>, initializes the output sequence to point to the last character of the buffer. </P></LI>
</UL>
<A NAME="sec9"><H3>Member Functions</H3></A>

<A NAME="idx400"></A><PRE>int_type 
<B>overflow</B>(int_type c = traits_type::eof()); </PRE>
<UL>
<P>If the output sequence has a <SAMP>put</SAMP> position available, and <SAMP>c</SAMP> is not <SAMP>traits_type::eof()</SAMP>, this function writes <SAMP>c</SAMP> into it. If there is no position available, the function increases the size of the buffer by allocating more memory and then writes <SAMP>c</SAMP> at the new current <SAMP>put</SAMP> position. If the operation fails, the function returns <SAMP>traits_type::eof()</SAMP>. Otherwise, it returns <SAMP>traits_type::not_eof(c)</SAMP>.</P>
</UL>


<A NAME="idx401"></A><PRE>int_type 
<B>pbackfail</B>(int_type c = traits_type::eof()); </PRE>
<UL>
<P>Puts back the character designated by <SAMP>c</SAMP> into the input sequence. If <SAMP>traits_type::eq_int_type(c,traits_type::eof())</SAMP> returns <SAMP>true</SAMP>, the function moves the input sequence one position backward. If the operation fails, the function returns <SAMP>traits_type::eof()</SAMP>. Otherwise, it returns <SAMP>traits_type::not_eof(c)</SAMP>.</P>
</UL>


<A NAME="idx402"></A><PRE>pos_type 
<B>seekoff</B>(off_type off, ios_base::seekdir way,
        ios_base::openmode which = 
        ios_base::in | ios_base::out); </PRE>
<UL>
<P>If the open mode is <SAMP>in | out</SAMP>, this function alters the stream position of both the input and the output sequences. If the open mode is <SAMP>in</SAMP>, it alters the stream position of only the input sequence, and if it is <SAMP>out</SAMP>, it alters the stream position of only the output sequence. The new position is calculated by combining the two parameters, <SAMP>off</SAMP> (displacement) and <SAMP>way</SAMP> (reference point). If the current position of the sequence is invalid before repositioning, the operation fails and the return value is <SAMP>pos_type(off_type(-1))</SAMP>. Otherwise, the function returns the current new position.</P>
</UL>


<A NAME="idx403"></A><PRE>pos_type 
<B>seekpos</B>(pos_type sp,ios_base::openmode which = 
        ios_base::in | ios_base::out); </PRE>
<UL>
<P>If the open mode is <SAMP>in | out</SAMP>, the function alters the stream position of both the input and the output sequences. If the open mode is <SAMP>in</SAMP>, it alters the stream position of the input sequence only, and if the open mode is <SAMP>out</SAMP>, it alters the stream position of the output sequence only. If the current position of the sequence is invalid before repositioning, the operation fails and the return value is <SAMP>pos_type(off_type(-1))</SAMP>. Otherwise, the function returns the current new position.</P>
</UL>


<A NAME="idx404"></A><PRE>basic_streambuf&lt;charT,traits&gt;* 
<B>setbuf</B>(char_type* s, streamsize n); </PRE>
<UL>
<P>A stringbuf maintains an underlying character array for storing buffered characters. This function gives you a way to resize or replace that buffer, with certain restrictions.</P>
<P>First of all, <SAMP>n</SAMP> must be greater than the number of characters currently in the buffer. If <SAMP>n</SAMP> is too small, then <SAMP>setbuf()</SAMP> has no effect and returns a null pointer to indicate failure. </P>
<P>If <SAMP>n</SAMP> is large enough, this function has one of the following effects:</P>
<UL>
<LI><P CLASS="LIST">If <SAMP>s</SAMP> is not a null pointer, <SAMP>setbuf()</SAMP> copies the buffered contents of the <B><I><A HREF="basic-stringbuf.html">stringbuf</A></I></B> into the <SAMP>n</SAMP> character array starting at <SAMP>s,</SAMP> and installs <SAMP>s</SAMP> as the underlying character array used by the <B><I>stringbuf</I></B>.  <SAMP>s</SAMP> replaces the old underlying array. In this case, the function returns <SAMP>s</SAMP> on success or a null pointer on failure. The caller is responsible for deleting the buffer.</P></LI>
<LI><P CLASS="LIST">If <SAMP>s</SAMP> is a null pointer and <SAMP>n</SAMP> is <SAMP>0</SAMP>, the function has no effect. </P></LI>
<LI><P CLASS="LIST">If <SAMP>s</SAMP> is a null pointer,  <SAMP>setbuf()</SAMP> resizes the underlying character array to <SAMP>n</SAMP> characters. The function returns a pointer to the beginning of the resized array if the operation is successful, or a null pointer if not. The object is responsible for deleting the buffer.</P></LI>
</UL>
</UL>


<A NAME="idx405"></A><PRE>
basic_string&lt;char_type, traits_type, Allocator&gt;
<B>str</B>() const; </PRE>
<UL>
<P>Returns a string object of type <SAMP>basic_string&lt;char_type, traits_type, Allocator&gt;</SAMP>, whose content is a copy of the underlying buffer contents.</P>
</UL>


<A NAME="idx406"></A><PRE>void 
<B>str</B>(const basic_string&lt;char_type,<I> </I>traits_type,<I> </I>Allocator&gt;&amp;<I> </I>str);</PRE>
<UL>
<P>Clears the underlying buffer and copies the string object <SAMP>str</SAMP> into it. If the opening mode is <SAMP>in</SAMP>, initializes the input sequence to point to the first character of the buffer. If the opening mode is <SAMP>out</SAMP>, the function initializes the output sequence to point to the first character of the buffer. If the opening mode is <SAMP>out | app</SAMP>, it initializes the output sequence to point to the last character of the buffer. </P>
</UL>


<A NAME="idx407"></A><PRE>int_type 
<B>underflow</B>();</PRE>
<UL>
<P>If the input sequence has a read position available, returns the contents of this position. Otherwise, it tries to expand the input sequence to match the output sequence, and if possible returns the content of the new current position, <SAMP>traits_type::to_int_type(*gptr())</SAMP>. The function returns <SAMP>traits_type::eof()</SAMP> to indicate failure.</P>
</UL>


<A NAME="idx408"></A><PRE>streamsize 
<B>xsputn</B>(const char_type* s, streamsize n); </PRE>
<UL>
<P>Writes up to <SAMP>n</SAMP> characters to the output sequence. The characters written are obtained from successive elements of the array whose first element is designated by <SAMP>s</SAMP>. The function returns the number of characters written.</P>
</UL>

<A NAME="sec10"><H3>Example</H3></A>

<UL><PRE>//
//  stringbuf.cpp
//
 
#include &lt;iostream&gt;   // for cout, endl
#include &lt;sstream&gt;    // for istringstream, ostringstream
#include &lt;string&gt;     // for string



int main ()
{
    // create a read/write string-stream object on tiny char
    // and attach it to an ostringstream object
    std::ostringstream out_1 (std::ios::in | std::ios::out);

    // tie the istream object to the ostringstream object
    std::istream in_1 (out_1.rdbuf ());   

    // output to out_1
    out_1 &lt;&lt; "Here is the first ouput";

    // create a string object on tiny char 
    std::string string_ex = "L'heure est grave!";

    // open a read only stringstream object and initialize it
    std::istringstream in_2 (string_ex);

    // output in_1 to the standard output
    std::cout &lt;&lt; in_1.rdbuf () &lt;&lt; std::endl;

    // reposition in_1 at the beginning
    in_1.seekg (0);

    // output in_2 to the standard output
    std::cout &lt;&lt; in_2.rdbuf () &lt;&lt; std::endl;

    // reposition in_2 at the beginning
    in_2.seekg (0);

    // get the current put position (equivalent to 
    // out_1.tellp())
    std::stringbuf::pos_type pos =
        out_1.rdbuf ()-&gt;pubseekoff (0, std::ios::cur, 
                                    std::ios::out);

    // append the content of the stringbuf pointed to by in_2
    // to the one  pointed at by out_1
    out_1 &lt;&lt; ' ' &lt;&lt; in_2.rdbuf ();

    // output in_1 to the standard output
    std::cout &lt;&lt; in_1.rdbuf () &lt;&lt; std::endl;

    // position the get sequence (equivalent to 
    // in_1.seekg (pos))
    in_1.rdbuf ()-&gt;pubseekpos (pos, std::ios::in);

    // output "L'heure est grave!"
    std::cout &lt;&lt; in_1.rdbuf () &lt;&lt; std::endl;  

    return 0;
}


Program Output:
</PRE></UL>
<UL><PRE>Here is the first ouput
L'heure est grave!
Here is the first ouput L'heure est grave!
 L'heure est grave!

</PRE></UL>
<A NAME="sec11"><H3>See Also</H3></A>
<P><B><I><A HREF="char-traits.html">char_traits</A></I></B>, <B><I><A HREF="ios-base.html">ios_base</A></I></B>, <B><I><A HREF="basic-ios.html">basic_ios</A></I></B>, <B><I><A HREF="basic-streambuf.html">basic_streambuf</A></I></B>, <B><I><A HREF="basic-string.html">basic_string</A></I></B>, <B><I><A HREF="basic-istringstream.html">basic_istringstream</A></I></B>, <B><I><A HREF="basic-ostringstream.html">basic_ostringstream</A></I></B>, <B><I><A HREF="basic-stringstream.html">basic_stringstream</A></I></B></P>
<A NAME="sec12"><H3>Standards Conformance</H3></A>
<P><I>ISO/IEC 14882:1998 -- International Standard for Information Systems --Programming Language C++, Section 27.7.1</I></P>

<BR>
<HR>
<A HREF="basic-string.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="basic-stringstream.html"><IMG SRC="images/bnext.gif" WIDTH=20 HEIGHT=21 ALT="Next file" BORDER=O></A>

<!-- Google Analytics tracking code -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
    _uacct = "UA-1775151-1";
    urchinTracker();
</script>
<!-- end of Google Analytics tracking code -->

</BODY>
</HTML>
