Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > ba6e5e1a033bd8535c43a771ce407926 > files > 393

lib64cxx-gtk-utils2.2-devel-2.2.3-2.mga4.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.4"/>
<title>c++-gtk-utils: gstreams</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">c++-gtk-utils
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.4 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#typedef-members">Typedefs</a>  </div>
  <div class="headertitle">
<div class="title">gstreams</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCgu_1_1basic__gstreambuf.html">Cgu::basic_gstreambuf&lt; charT, Traits &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ stream buffer for GIO streams.  <a href="classCgu_1_1basic__gstreambuf.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCgu_1_1basic__gostream.html">Cgu::basic_gostream&lt; charT, Traits &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ output stream for GIO streams.  <a href="classCgu_1_1basic__gostream.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCgu_1_1basic__gistream.html">Cgu::basic_gistream&lt; charT, Traits &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input stream for GIO streams.  <a href="classCgu_1_1basic__gistream.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCgu_1_1basic__giostream.html">Cgu::basic_giostream&lt; charT, Traits &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input-output stream for GIO streams.  <a href="classCgu_1_1basic__giostream.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga0a2f9976e0c3499c13442b925f5e8f9e"><td class="memItemLeft" align="right" valign="top">typedef basic_gstreambuf&lt; char &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga0a2f9976e0c3499c13442b925f5e8f9e">Cgu::gstreambuf</a></td></tr>
<tr class="memdesc:ga0a2f9976e0c3499c13442b925f5e8f9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ stream buffer for GIO streams for char type.  <a href="#ga0a2f9976e0c3499c13442b925f5e8f9e">More...</a><br/></td></tr>
<tr class="separator:ga0a2f9976e0c3499c13442b925f5e8f9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga50a922fa93858106458a9da7722118a9"><td class="memItemLeft" align="right" valign="top">typedef basic_gistream&lt; char &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga50a922fa93858106458a9da7722118a9">Cgu::gistream</a></td></tr>
<tr class="memdesc:ga50a922fa93858106458a9da7722118a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input stream for GIO streams for char type.  <a href="#ga50a922fa93858106458a9da7722118a9">More...</a><br/></td></tr>
<tr class="separator:ga50a922fa93858106458a9da7722118a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf601782cc7c521ad0aec6ddff2ed3139"><td class="memItemLeft" align="right" valign="top">typedef basic_gostream&lt; char &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#gaf601782cc7c521ad0aec6ddff2ed3139">Cgu::gostream</a></td></tr>
<tr class="memdesc:gaf601782cc7c521ad0aec6ddff2ed3139"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ output stream for GIO streams for char type.  <a href="#gaf601782cc7c521ad0aec6ddff2ed3139">More...</a><br/></td></tr>
<tr class="separator:gaf601782cc7c521ad0aec6ddff2ed3139"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0dd24c5eb7f02e7179f0ac4e6093026c"><td class="memItemLeft" align="right" valign="top">typedef basic_giostream&lt; char &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga0dd24c5eb7f02e7179f0ac4e6093026c">Cgu::giostream</a></td></tr>
<tr class="memdesc:ga0dd24c5eb7f02e7179f0ac4e6093026c"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input/output stream for GIO streams for char type.  <a href="#ga0dd24c5eb7f02e7179f0ac4e6093026c">More...</a><br/></td></tr>
<tr class="separator:ga0dd24c5eb7f02e7179f0ac4e6093026c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga71b5bacd58d5d74d0d0e15f875f7d9db"><td class="memItemLeft" align="right" valign="top">typedef basic_gstreambuf&lt; wchar_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga71b5bacd58d5d74d0d0e15f875f7d9db">Cgu::wgstreambuf</a></td></tr>
<tr class="memdesc:ga71b5bacd58d5d74d0d0e15f875f7d9db"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ stream buffer for GIO streams for wchar_t type.  <a href="#ga71b5bacd58d5d74d0d0e15f875f7d9db">More...</a><br/></td></tr>
<tr class="separator:ga71b5bacd58d5d74d0d0e15f875f7d9db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga02f7d31dbb3f1589416d0455fe6a6b17"><td class="memItemLeft" align="right" valign="top">typedef basic_gistream&lt; wchar_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga02f7d31dbb3f1589416d0455fe6a6b17">Cgu::wgistream</a></td></tr>
<tr class="memdesc:ga02f7d31dbb3f1589416d0455fe6a6b17"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input stream for GIO streams for wchar_t type.  <a href="#ga02f7d31dbb3f1589416d0455fe6a6b17">More...</a><br/></td></tr>
<tr class="separator:ga02f7d31dbb3f1589416d0455fe6a6b17"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2e03297004baf396ee76a8444dc96db5"><td class="memItemLeft" align="right" valign="top">typedef basic_gostream&lt; wchar_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga2e03297004baf396ee76a8444dc96db5">Cgu::wgostream</a></td></tr>
<tr class="memdesc:ga2e03297004baf396ee76a8444dc96db5"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ output stream for GIO streams for wchar_t type.  <a href="#ga2e03297004baf396ee76a8444dc96db5">More...</a><br/></td></tr>
<tr class="separator:ga2e03297004baf396ee76a8444dc96db5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga863de0bd9fe72837bb7098c82f58dc6f"><td class="memItemLeft" align="right" valign="top">typedef basic_giostream&lt; wchar_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga863de0bd9fe72837bb7098c82f58dc6f">Cgu::wgiostream</a></td></tr>
<tr class="memdesc:ga863de0bd9fe72837bb7098c82f58dc6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input/output stream for GIO streams for wchar_t type.  <a href="#ga863de0bd9fe72837bb7098c82f58dc6f">More...</a><br/></td></tr>
<tr class="separator:ga863de0bd9fe72837bb7098c82f58dc6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5b4e68874a133ac65a42255af595c6b2"><td class="memItemLeft" align="right" valign="top">typedef basic_gstreambuf<br class="typebreak"/>
&lt; char16_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga5b4e68874a133ac65a42255af595c6b2">Cgu::u16gstreambuf</a></td></tr>
<tr class="memdesc:ga5b4e68874a133ac65a42255af595c6b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ stream buffer for GIO streams for char16_t type.  <a href="#ga5b4e68874a133ac65a42255af595c6b2">More...</a><br/></td></tr>
<tr class="separator:ga5b4e68874a133ac65a42255af595c6b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8808f69293d0bebbc8522c6c263ee7db"><td class="memItemLeft" align="right" valign="top">typedef basic_gistream&lt; char16_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga8808f69293d0bebbc8522c6c263ee7db">Cgu::u16gistream</a></td></tr>
<tr class="memdesc:ga8808f69293d0bebbc8522c6c263ee7db"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input stream for GIO streams for char16_t type.  <a href="#ga8808f69293d0bebbc8522c6c263ee7db">More...</a><br/></td></tr>
<tr class="separator:ga8808f69293d0bebbc8522c6c263ee7db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga77446d9796635382908ea8ffd32a278f"><td class="memItemLeft" align="right" valign="top">typedef basic_gostream&lt; char16_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga77446d9796635382908ea8ffd32a278f">Cgu::u16gostream</a></td></tr>
<tr class="memdesc:ga77446d9796635382908ea8ffd32a278f"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ output stream for GIO streams for char16_t type.  <a href="#ga77446d9796635382908ea8ffd32a278f">More...</a><br/></td></tr>
<tr class="separator:ga77446d9796635382908ea8ffd32a278f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafb9359dfb52357482b73c69d8bfcb3a1"><td class="memItemLeft" align="right" valign="top">typedef basic_giostream&lt; char16_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#gafb9359dfb52357482b73c69d8bfcb3a1">Cgu::u16giostream</a></td></tr>
<tr class="memdesc:gafb9359dfb52357482b73c69d8bfcb3a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input/output stream for GIO streams for char16_t type.  <a href="#gafb9359dfb52357482b73c69d8bfcb3a1">More...</a><br/></td></tr>
<tr class="separator:gafb9359dfb52357482b73c69d8bfcb3a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf9472a0a51a96c1f2c8b22e3d825d7db"><td class="memItemLeft" align="right" valign="top">typedef basic_gstreambuf<br class="typebreak"/>
&lt; char32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#gaf9472a0a51a96c1f2c8b22e3d825d7db">Cgu::u32gstreambuf</a></td></tr>
<tr class="memdesc:gaf9472a0a51a96c1f2c8b22e3d825d7db"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ stream buffer for GIO streams for char32_t type.  <a href="#gaf9472a0a51a96c1f2c8b22e3d825d7db">More...</a><br/></td></tr>
<tr class="separator:gaf9472a0a51a96c1f2c8b22e3d825d7db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad065f53dddbd101396e6755a62fe9964"><td class="memItemLeft" align="right" valign="top">typedef basic_gistream&lt; char32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#gad065f53dddbd101396e6755a62fe9964">Cgu::u32gistream</a></td></tr>
<tr class="memdesc:gad065f53dddbd101396e6755a62fe9964"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input stream for GIO streams for char32_t type.  <a href="#gad065f53dddbd101396e6755a62fe9964">More...</a><br/></td></tr>
<tr class="separator:gad065f53dddbd101396e6755a62fe9964"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4bdb06d4a5e0d250bb0dc0f8ee2bcb12"><td class="memItemLeft" align="right" valign="top">typedef basic_gostream&lt; char32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga4bdb06d4a5e0d250bb0dc0f8ee2bcb12">Cgu::u32gostream</a></td></tr>
<tr class="memdesc:ga4bdb06d4a5e0d250bb0dc0f8ee2bcb12"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ output stream for GIO streams for char32_t type.  <a href="#ga4bdb06d4a5e0d250bb0dc0f8ee2bcb12">More...</a><br/></td></tr>
<tr class="separator:ga4bdb06d4a5e0d250bb0dc0f8ee2bcb12"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4e5293d03097caa9e1cae43627333358"><td class="memItemLeft" align="right" valign="top">typedef basic_giostream&lt; char32_t &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__gstreams.html#ga4e5293d03097caa9e1cae43627333358">Cgu::u32giostream</a></td></tr>
<tr class="memdesc:ga4e5293d03097caa9e1cae43627333358"><td class="mdescLeft">&#160;</td><td class="mdescRight">C++ input/output stream for GIO streams for char32_t type.  <a href="#ga4e5293d03097caa9e1cae43627333358">More...</a><br/></td></tr>
<tr class="separator:ga4e5293d03097caa9e1cae43627333358"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>#include &lt;c++-gtk-utils/gstream.h&gt;</p>
<p>The c++-gtk-utils library contains C++ classes providing a streambuffer and stream objects interfacing with GIO streams.</p>
<p>Normally 'true' would be passed as the second (manage) argument of the gostream/gistream/giostream constructors or of the attach() methods, so that the destructors of these classes close the GIO streams concerned, which helps exception safety (the attach() method will also close any previous GIO stream). If this behaviour is not wanted, pass 'false' instead to that argument.</p>
<p>C++ stream objects are not suitable for asynchronous input and output. On sockets and pipes or other special devices, they may block on a read or write until the read or write request has been satisfied. In circumstances where asynchronous input and output is wanted, it will be necessary to start a new thread in which to carry out the input and output operations (which is what GIO does behind the scenes on its asynchronous operations) or use the GIO interfaces directly.</p>
<p>Here are some examples of use:</p>
<div class="fragment"><div class="line"><span class="comment">// open file for input, another for output, and make the</span></div>
<div class="line"><span class="comment">// output file a gzipped copy of the input (gzipping a</span></div>
<div class="line"><span class="comment">// file doesn&#39;t get much easier than this)</span></div>
<div class="line"><a class="code" href="classCgu_1_1basic__gistream.html" title="C++ input stream for GIO streams. ">Cgu::gistream</a> input;</div>
<div class="line"><a class="code" href="classCgu_1_1basic__gostream.html" title="C++ output stream for GIO streams. ">Cgu::gostream</a> output;</div>
<div class="line"><a class="code" href="classCgu_1_1GobjHandle.html" title="This is a handle for managing the reference count of GObjects. ">Cgu::GobjHandle&lt;GFile&gt;</a> file_in(g_file_new_for_path(<span class="stringliteral">&quot;filename&quot;</span>));</div>
<div class="line">GFileInputStream* is = g_file_read(file_in, 0, 0);</div>
<div class="line"><span class="keywordflow">if</span> (is) </div>
<div class="line">  input.<a class="code" href="classCgu_1_1basic__gistream.html#acadc621e7f01ebdd0d2984bed4551def">attach</a>(<a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GInputStream&gt;</a>(G_INPUT_STREAM(is)), <span class="comment">// takes ownership of &#39;is&#39;</span></div>
<div class="line">               <span class="keyword">true</span>);</div>
<div class="line"><span class="keywordflow">else</span> {</div>
<div class="line">  std::cerr &lt;&lt; <span class="stringliteral">&quot;Can&#39;t open file &#39;filename&#39;&quot;</span> &lt;&lt; std::endl;</div>
<div class="line">  <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="line"><a class="code" href="classCgu_1_1GobjHandle.html" title="This is a handle for managing the reference count of GObjects. ">Cgu::GobjHandle&lt;GFile&gt;</a> file_out(g_file_new_for_path(<span class="stringliteral">&quot;filename.gz&quot;</span>));</div>
<div class="line">GFileOutputStream* os = g_file_replace(file_out, 0, <span class="keyword">false</span>,</div>
<div class="line">                                       G_FILE_CREATE_REPLACE_DESTINATION,</div>
<div class="line">                                       0, 0);</div>
<div class="line"><span class="keywordflow">if</span> (os) {</div>
<div class="line">   output.<a class="code" href="classCgu_1_1basic__gostream.html#a06374d8e33481f7b4526024e7a8d3a7a">attach</a>(<a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GOutputStream&gt;</a>(G_OUTPUT_STREAM(os)), <span class="comment">// takes ownership of &#39;os&#39;</span></div>
<div class="line">                 <span class="keyword">true</span>,</div>
<div class="line">                 <a class="code" href="classCgu_1_1GobjHandle.html" title="This is a handle for managing the reference count of GObjects. ">Cgu::GobjHandle&lt;GConverter&gt;</a>(</div>
<div class="line">                   G_CONVERTER(g_zlib_compressor_new(G_ZLIB_COMPRESSOR_FORMAT_GZIP, -1)))</div>
<div class="line">                 );</div>
<div class="line">}</div>
<div class="line"><span class="keywordflow">else</span> {</div>
<div class="line">  std::cerr &lt;&lt; <span class="stringliteral">&quot;Can&#39;t create file &#39;filename.gz&#39;&quot;</span> &lt;&lt; std::endl;</div>
<div class="line">  <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="line"><span class="comment">// this does the copying, and is shorthand for creating your own buffer</span></div>
<div class="line"><span class="comment">// and calling std::istream::read() and std::ostream::write() on it</span></div>
<div class="line">output &lt;&lt; input.rdbuf();</div>
<div class="line"></div>
<div class="line">--------------------------------------------------------------------</div>
<div class="line"></div>
<div class="line"><span class="comment">// establish a TCP socket on localhost, listen for connections on port</span></div>
<div class="line"><span class="comment">// 1200 and receive whitespace-separated words for processing</span></div>
<div class="line"><span class="keyword">using</span> <a class="code" href="classCgu_1_1GobjHandle.html" title="This is a handle for managing the reference count of GObjects. ">Cgu::GobjHandle</a>;</div>
<div class="line">GobjHandle&lt;GInetAddress&gt; i(g_inet_address_new_loopback(G_SOCKET_FAMILY_IPV4));</div>
<div class="line">GobjHandle&lt;GSocketAddress&gt; a(g_inet_socket_address_new(i, 1200));</div>
<div class="line">GobjHandle&lt;GSocketListener&gt; l(g_socket_listener_new());</div>
<div class="line"></div>
<div class="line">gboolean success = g_socket_listener_add_address(l,</div>
<div class="line">                                                 a,</div>
<div class="line">                                                 G_SOCKET_TYPE_STREAM,</div>
<div class="line">                                                 G_SOCKET_PROTOCOL_TCP,</div>
<div class="line">                                                 0, 0, 0);</div>
<div class="line"><span class="keywordflow">if</span> (!success) {</div>
<div class="line">  std::cerr &lt;&lt; <span class="stringliteral">&quot;Can&#39;t bind socket on localhost&quot;</span> &lt;&lt; std::endl;</div>
<div class="line">  <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line">GSocketConnection* c = g_socket_listener_accept(l, 0, 0, 0);</div>
<div class="line"><span class="keywordflow">if</span> (!c) {</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot;Can&#39;t listen on localhost&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"> <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><a class="code" href="classCgu_1_1basic__giostream.html" title="C++ input-output stream for GIO streams. ">Cgu::giostream</a> sock_strm(GobjHandle&lt;GIOStream&gt;(G_IO_STREAM(c)), <span class="keyword">true</span>); <span class="comment">// takes ownership of c</span></div>
<div class="line">sock_strm.set_output_buffered(<span class="keyword">false</span>);</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Connection accepted&quot;</span> &lt;&lt; std::endl;</div>
<div class="line"></div>
<div class="line">std::string str;</div>
<div class="line"><span class="keywordflow">while</span> (sock_strm &gt;&gt; str) {</div>
<div class="line">  [ ... <span class="keywordflow">do</span> something with the word in str ... ]</div>
<div class="line">  <span class="comment">// acknowledge the client</span></div>
<div class="line">  sock_strm &lt;&lt; <span class="stringliteral">&quot;ACK\n&quot;</span>;</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line">--------------------------------------------------------------------</div>
<div class="line"></div>
<div class="line"><span class="comment">// read line delimited text from a pipe until it is closed by the</span></div>
<div class="line"><span class="comment">// writer: assume &#39;fd&#39; is the read file descriptor of the pipe</span></div>
<div class="line"><span class="comment">// (in real life you would probably want to use a Cgu::fdistream</span></div>
<div class="line"><span class="comment">// object in this usage and bypass GIO)</span></div>
<div class="line"><a class="code" href="classCgu_1_1basic__gistream.html" title="C++ input stream for GIO streams. ">Cgu::gistream</a> istrm(<a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GInputStream&gt;</a>(g_unix_input_stream_new(fd, <span class="keyword">true</span>)), <span class="keyword">true</span>);</div>
<div class="line"><span class="keywordflow">if</span> (!istrm.get_gio_stream().get()) {</div>
<div class="line">  std::cerr &lt;&lt; <span class="stringliteral">&quot;Can&#39;t create gio file-descriptor input stream&quot;</span> &lt;&lt; std::endl;</div>
<div class="line">  <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="line">std::string line;</div>
<div class="line"><span class="keywordflow">while</span> (std::getline(istrm, line)) {</div>
<div class="line">  [ ... <span class="keywordflow">do</span> something with the read text ... ]</div>
<div class="line">}</div>
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>1. Users cannot (except by derivation) use the virtual protected methods of the streambuffer classes, including xsgetn() and xsputn(). Instead, if they want direct access to the streambuffer other than through the gostream/gistream/giostream methods (or their wide stream equivalents), they should use the public forwarding functions provided by std::streambuf base class. </dd>
<dd>
2. These streambuffers and stream objects are not copiable. </dd>
<dd>
3. The base glib requirement for the c++-gtk-utils library is glib &gt;= 2.10.0, but the gstreams component will only be available if glib &gt;= 2.16.0 is installed.</dd></dl>
<h2>Buffering </h2>
<p>The classes implement buffering on input streams and (unless output buffering is switched off) on output streams. They implement the buffering internally and do not use GBufferedInputStream and GBufferedOutputStream. This has a number of efficiency advantages and also retains random access, on devices that support it, for buffered streams (GBufferedInputStream and GBufferedOutputStream do not do so). So far as concerns random access on GIOStream objects, which are opened for both read and write, see <a class="el" href="group__gstreams.html#GioRandomAccessAnchor">giostream and random access</a></p>
<p>The streambuf class provides a block read and write in xsgetn() and xsputn(), which will be called by the read() and write() methods (and some other output operators) inherited by (w)gistream, (w)gostream and (w)giostream from std::basic_istream and std::basic_ostream. They operate (after appropriately vacating and resetting the buffers) by doing a block read and write directly to and from the target, and are very efficient for large block reads (those significantly exceeding the buffer size). If users want all reads and writes to go through the buffers, by using std::basic_streambuf&lt;&gt;::xsputn() and std::basic_streambuf&lt;&gt;::xsgetn() then the symbol CGU_GSTREAM_USE_STD_N_READ_WRITE can be defined. (libstdc++-3 provides efficient inbuilt versions of these std::basic_streambuf functions for block reads not significantly larger than the buffer size, provided output buffering has not been turned off by the set_output_buffered() method of these classes.)</p>
<p><b>Note</b> <b>however</b> that if CGU_GSTREAM_USE_STD_N_READ_WRITE is to be defined, it is best to do this by textually amending the installed <a class="el" href="gstream_8h.html">gstream.h</a> header file rather than by defining the symbol in user code before that file is included. This will ensure that all source files in a program which include the <a class="el" href="gstream_8h.html">gstream.h</a> header are guaranteed to see the same definitions so that the C++ standard's one-definition-rule is complied with.</p>
<p>One possible case for defining that symbol is where the user wants to use the tie() method of (w)gistream or (w)giostream (inherited from std::basic_ios) to procure flushing of an output stream before extraction from an input stream is made by (w)gistream::read() or (w)giostream::read(). Such flushing might not occur where a call to read() is made unless CGU_GSTREAM_USE_STD_N_READ_WRITE is defined, because an implementation is permitted to defer such flushing until underflow() occurs, and the block read by read(), as forwarded to xsgetn(), will never invoke underflow() if that symbol is not defined. (Having said that, any basic_istream implementation which does defer output flushing until underflow() is called makes tie() unusable anyway for a number of purposes, because the time of flushing would become dependent on whether a read request can be satisfied by what is already in the buffers.)</p>
<p>4 characters are stored and available for putback. However, if the symbol CGU_GSTREAM_USE_STD_N_READ_WRITE is not defined, then a call to (w)<a class="el" href="classCgu_1_1basic__gstreambuf.html#a96432cdad1e3a27cf5279f550ab1b50b">gstreambuf::xsgetn()</a> via (w)gistream::read() or (w)giostream::read() with a request for less than 4 characters will result in less than 4 characters available for putback (if these block read methods obtain some characters but less than 4, only the number of characters obtained by them is guaranteed to be available for putback).</p>
<p><a class="anchor" id="GioRandomAccessAnchor"></a></p>
<h2>giostream and random access </h2>
<p>For GIO objects which implement GSeekable (which are GFileIOStream, GFileInputStream, GFileOutputStream, GMemoryInputStream and GMemoryOutputStream), the classes in this c++-gtk-utils library implement the tellg(), tellp(), seekg() and seekp() random access methods.</p>
<p>The presence of buffering does not impede this where a stream is only opened for reading or only opened for writing. However, it presents complications if the giostream or wgiostream classes are used with a GFIleIOStream object (GFileIOStream objects are opened for both read and write). Because the classes employ buffering of input, and optional buffering of output, the logical file position (the file position expected by the user from the reads and writes she has made) will usually differ from the actual file position seen by the underlying operating system. The gstreambuf class provided by this library implements intelligent tying between input and output streams for GFileIOStream objects which means that if output has been made unbuffered by a call to set_output_buffered(false) and no converter has been attached, all reads and writes onto the file system from the same giostream object will be made at the expected logical position.</p>
<p>This cannot be done by the gstreambuf class where the output stream is set as buffered (the default). In that case, if the last operation on a giostream or wgiostream object 'strm' was a read, before the first write operation thereafter is made on it, the user should call strm.seekg(strm.tellg()) or strm.seekp(strm.tellp()) (the two have the same effect), in order to synchronise the logical and actual file positions, or if the user does not want to maintain the current logical file position, make some other call to seekg() or seekp() which does not comprise only seekg(0, std::ios_base::cur) or seekp(0, std::ios_base::cur). Many std::basic_iostream implementations, as inherited by <a class="el" href="group__gstreams.html#ga0dd24c5eb7f02e7179f0ac4e6093026c" title="C++ input/output stream for GIO streams for char type. ">Cgu::giostream</a>, will synchronise positions automatically on seekable streams via their sentry objects in order to provide support for buffered random access on their std::basic_fstream class (gcc's libstdc++ library does this, for example), making these steps unnecessary, but following these steps will provide maximum portability. The same applies to the equivalent wide stream classes.</p>
<p>If a GFileIOStream object attached to a giostream or wgiostream object is not seekable (that is, can_seek() returns false), say because an input or output converter has been attached or the filesystem is a network file system, no random access may be attempted. In particular, the tellg(), tellp(), seekg() and seekp() methods will not work (they will return pos_type(off_type(-1))). Furthermore, if a giostream or wgiostream object which manages a GFileIOStream object (as opposed to a socket) has a converter attached or is not seekable for some other reason, then after a read has been made no further write may be made using the same GFileIOStream object, so the use of converters with giostream or wgiostream objects should generally be restricted to use with sockets (GSocketConnection objects) only. Where converters are used with files on a filesystem, it is best to use the gostream and gistream classes (or their wide stream equivalents), and to close one stream before opening the other where they address the same file.</p>
<p>None of these restrictions applies to GSocketConnection objects obtained by a call to g_socket_listener_accept() or g_socket_client_connect(), or obtained in some other way, as these do not maintain file pointers. They can be attached to a giostream or wgiostream object (with or without a converter) without any special precautions being taken, other than the normal step of calling giostream::flush() (or using the std::flush manipulator) to flush the output buffer to the socket if the user needs to know that that has happened (or setting output buffering off with the set_output_buffered() method). In summary, on a socket, a read does not automatically flush the output buffer: it is for the user to do that.</p>
<h2>Wide streams and endianness </h2>
<p>This library provides typedef'ed instances of the template classes for wchar_t, char16_t and char32_t characters. Unless a converter is attached (for, say, UTF-32LE to UTF-32BE, or vice versa), with these wide character classes wide characters are written out in the native endian format of the writing machine. Whether or not a converter from one endianness to another is attached, special steps need to be taken if the text which is sent for output might be read by machines of unknown endianness.</p>
<p>No such special steps are required where the wide character classes are used with temporary files, pipes, fifos, unix domain sockets and network sockets on localhost, because in those cases they will be read by the same machine that writes; but they are required where sockets communicate with other computers over a network or when writing to files which may be distributed to and read by other computers with different endianness.</p>
<p>Where wide characters are to be exported to other machines, one useful approach is to convert to and from UTF-8 with <a class="el" href="namespaceCgu_1_1Utf8.html#aed9fb2b2c808c3fcc0ced702c0a839f9">Utf8::uniwide_from_utf8()</a>, <a class="el" href="namespaceCgu_1_1Utf8.html#aa43759d9eb1b4286ce121b23a85b6652">Utf8::uniwide_to_utf8()</a>, <a class="el" href="namespaceCgu_1_1Utf8.html#ac5262583864d9f4b1281980318a0f678">Utf8::wide_from_utf8()</a> or <a class="el" href="namespaceCgu_1_1Utf8.html#aaf7bd04eac5268ae1272fcb72939549a">Utf8::wide_to_utf8()</a>, and to use gostream/gistream/giostream with the converted text, or to attach a converter for UTF-8, generated by GIO's g_charset_converter_new(), directly to a wgostream, wgistream or wgiostream object (or their char16_t and char32_t equivalents).</p>
<p>Instead of converting exported text to UTF-8, another approach is to use a byte order marker (BOM) as the first character of the wide stream output. UCS permits a BOM character to be inserted, comprising static_cast&lt;wchar_t&gt;(0xfeff), static_cast&lt;char16_t&gt;(0xfeff) or static_cast&lt;char32_t&gt;(0xfeff), at the beginning of the output to the wide character stream. At the receiving end, this will appear as 0xfffe (UTF-16) or 0xfffe0000 (UTF-32) to a big endian machine with 8 bit char type if the text is little endian, or to a little endian machine with big endian text, so signaling a need to undertake byte swapping of text read from the stream. Another alternative is to label the physical medium conveying the file as UTF-16LE, UTF-16BE, UTF-32LE or UTF-32BE, as the case may be, in which case a BOM character should not be prepended.</p>
<p>Where it is established by either means that the input stream requires byte swapping, the wide character input stream and wide character input streambuffer classes have a set_byteswap() member function which should be called on opening the input stream as soon as it has been established that byte swapping is required. Once this function has been called with an argument of 'true', all further calls to stream functions which provide characters will provide those characters with the correct native endianness. Calling set_byteswap() on the narrow stream gistream, giostream and gstreambuf objects has no effect (byte order is irrelevant to narrow streams).</p>
<p>Here is an example of such use in a case where sizeof(wchar_t) is 4:</p>
<div class="fragment"><div class="line"> <span class="keyword">using</span> <a class="code" href="classCgu_1_1GobjHandle.html" title="This is a handle for managing the reference count of GObjects. ">Cgu::GobjHandle</a>;</div>
<div class="line"> <a class="code" href="classCgu_1_1basic__gistream.html" title="C++ input stream for GIO streams. ">Cgu::wgistream</a> input;</div>
<div class="line"> GobjHandle&lt;GFile&gt; file_in(g_file_new_for_path(<span class="stringliteral">&quot;filename&quot;</span>));</div>
<div class="line"> GFileInputStream* is = g_file_read(file_in, 0, 0);</div>
<div class="line"> <span class="keywordflow">if</span> (is) </div>
<div class="line">   input.<a class="code" href="classCgu_1_1basic__gistream.html#acadc621e7f01ebdd0d2984bed4551def">attach</a>(GobjHandle&lt;GInputStream&gt;(G_INPUT_STREAM(is)), <span class="keyword">true</span>); <span class="comment">// takes ownership of &#39;is&#39;</span></div>
<div class="line"> <span class="keywordflow">else</span> {</div>
<div class="line">   std::cerr &lt;&lt; <span class="stringliteral">&quot;Can&#39;t open file &#39;filename&#39;&quot;</span></div>
<div class="line">             &lt;&lt; std::endl;</div>
<div class="line">   <span class="keywordflow">return</span>;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordtype">wchar_t</span> item;</div>
<div class="line"> input.get(item);</div>
<div class="line"> <span class="keywordflow">if</span> (!input) {</div>
<div class="line">   std::cerr &lt;&lt; <span class="stringliteral">&quot;File &#39;filename&#39; is empty&quot;</span> &lt;&lt; std::endl;</div>
<div class="line">   <span class="keywordflow">return</span>;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">if</span> (item == static_cast&lt;wchar_t&gt;(0xfffe0000))</div>
<div class="line">   input.<a class="code" href="classCgu_1_1basic__gistream.html#a2d3eb38e5c2097b4272c2be0192a6756">set_byteswap</a>(<span class="keyword">true</span>);</div>
<div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (item != static_cast&lt;wchar_t&gt;(0xfeff)) {</div>
<div class="line">   <span class="comment">// calling set_byteswap() will manipulate the buffers, so</span></div>
<div class="line">   <span class="comment">// either call putback() before we call set_byteswap(), or</span></div>
<div class="line">   <span class="comment">// call unget() instead</span></div>
<div class="line">   input.putback(item);</div>
<div class="line">   <span class="comment">// the first character is not a BOM character so assume big endian</span></div>
<div class="line">   <span class="comment">// format, and byte swap if the local machine is little endian</span></div>
<div class="line"><span class="preprocessor">#if G_BYTE_ORDER == G_LITTLE_ENDIAN</span></div>
<div class="line"><span class="preprocessor"></span>   input.<a class="code" href="classCgu_1_1basic__gistream.html#a2d3eb38e5c2097b4272c2be0192a6756">set_byteswap</a>(<span class="keyword">true</span>);</div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span> }</div>
<div class="line"> [ ... <span class="keywordflow">do</span> something with the input file ... ]</div>
</div><!-- fragment --><h2>Other wide stream issues </h2>
<p><a class="el" href="classCgu_1_1basic__gostream.html" title="C++ output stream for GIO streams. ">basic_gostream</a>, <a class="el" href="classCgu_1_1basic__gistream.html" title="C++ input stream for GIO streams. ">basic_gistream</a>, <a class="el" href="classCgu_1_1basic__giostream.html" title="C++ input-output stream for GIO streams. ">basic_giostream</a> and <a class="el" href="classCgu_1_1basic__gstreambuf.html" title="C++ stream buffer for GIO streams. ">basic_gstreambuf</a> objects can be instantiated for any integer type which has an appropriate traits class provided for it which has the copy(), eof(), eq_int_type(), move(), not_eof() and to_int_type() static member functions. The integer type could in fact have any size, but the set_byteswap() methods for <a class="el" href="classCgu_1_1basic__gistream.html" title="C++ input stream for GIO streams. ">basic_gistream</a>, <a class="el" href="classCgu_1_1basic__giostream.html" title="C++ input-output stream for GIO streams. ">basic_giostream</a> and <a class="el" href="classCgu_1_1basic__gstreambuf.html" title="C++ stream buffer for GIO streams. ">basic_gstreambuf</a> will only have an effect if its size is either 2 or 4. Typedef'ed instances of the classes are provided by the library for characters of type wchar_t, char16_t and char32_t.</p>
<h2>gtkmm users </h2>
<p>gtkmm/giomm does not provide C++ streams for GIO objects: instead, it provides a literal function-for-function wrapping. However, giomm users can use the stream classes provided by this library by converting the relevant Glib::RefPtr object to a <a class="el" href="classCgu_1_1GobjHandle.html" title="This is a handle for managing the reference count of GObjects. ">Cgu::GobjHandle</a> object. This can be done as follows:</p>
<div class="fragment"><div class="line"><span class="comment">// Glib::RefPtr&lt;Gio::InputStream&gt; to Cgu::GobjHandle&lt;GInputStream&gt;</span></div>
<div class="line"><span class="keyword">inline</span></div>
<div class="line"><a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GInputStream&gt;</a> giomm_input_convert(<span class="keyword">const</span> Glib::RefPtr&lt;Gio::InputStream&gt;&amp; in) {</div>
<div class="line">  <span class="keywordflow">return</span> <a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GInputStream&gt;</a>(<span class="keyword">static_cast&lt;</span>GInputStream*<span class="keyword">&gt;</span>(g_object_ref(in.operator-&gt;()-&gt;gobj())));</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="comment">// Glib::RefPtr&lt;Gio::OutputStream&gt; to Cgu::GobjHandle&lt;GOutputStream&gt;</span></div>
<div class="line"><span class="keyword">inline</span></div>
<div class="line"><a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GOutputStream&gt;</a> giomm_output_convert(<span class="keyword">const</span> Glib::RefPtr&lt;Gio::OutputStream&gt;&amp; out) {</div>
<div class="line">  <span class="keywordflow">return</span> <a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GOutputStream&gt;</a>(<span class="keyword">static_cast&lt;</span>GOutputStream*<span class="keyword">&gt;</span>(g_object_ref(out.operator-&gt;()-&gt;gobj())));</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="comment">// Glib::RefPtr&lt;Gio::IOStream&gt; to Cgu::GobjHandle&lt;GIOStream&gt;</span></div>
<div class="line"><span class="keyword">inline</span></div>
<div class="line"><a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GIOStream&gt;</a> giomm_io_convert(<span class="keyword">const</span> Glib::RefPtr&lt;Gio::IOStream&gt;&amp; io) {</div>
<div class="line">  <span class="keywordflow">return</span> <a class="code" href="classCgu_1_1GobjHandle.html">Cgu::GobjHandle&lt;GIOStream&gt;</a>(<span class="keyword">static_cast&lt;</span>GIOStream*<span class="keyword">&gt;</span>(g_object_ref(io.operator-&gt;()-&gt;gobj())));</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="comment">// example printing a text file to stdout with file opened with giomm</span></div>
<div class="line">Glib::RefPtr&lt;Gio::File&gt; file = Gio::File::create_for_path(<span class="stringliteral">&quot;filename&quot;</span>);</div>
<div class="line">Glib::RefPtr&lt;Gio::InputStream&gt; is = file-&gt;read();</div>
<div class="line"></div>
<div class="line"><a class="code" href="classCgu_1_1basic__gistream.html" title="C++ input stream for GIO streams. ">Cgu::gistream</a> filein(giomm_input_convert(is), <span class="keyword">true</span>);</div>
<div class="line"></div>
<div class="line">std::string line;</div>
<div class="line"><span class="keywordflow">while</span> (std::getline(filein, line)) {</div>
<div class="line">  std::cout &lt;&lt; line &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line">}</div>
</div><!-- fragment --> <h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="ga0dd24c5eb7f02e7179f0ac4e6093026c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga0dd24c5eb7f02e7179f0ac4e6093026c">Cgu::giostream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ input/output stream for GIO streams for char type. </p>
<p><a class="anchor" id="giostreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga50a922fa93858106458a9da7722118a9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga50a922fa93858106458a9da7722118a9">Cgu::gistream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ input stream for GIO streams for char type. </p>
<p><a class="anchor" id="gistreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="gaf601782cc7c521ad0aec6ddff2ed3139"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#gaf601782cc7c521ad0aec6ddff2ed3139">Cgu::gostream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ output stream for GIO streams for char type. </p>
<p><a class="anchor" id="gostreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga0a2f9976e0c3499c13442b925f5e8f9e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga0a2f9976e0c3499c13442b925f5e8f9e">Cgu::gstreambuf</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ stream buffer for GIO streams for char type. </p>

</div>
</div>
<a class="anchor" id="gafb9359dfb52357482b73c69d8bfcb3a1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#gafb9359dfb52357482b73c69d8bfcb3a1">Cgu::u16giostream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ input/output stream for GIO streams for char16_t type. </p>
<p><a class="anchor" id="u16giostreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga8808f69293d0bebbc8522c6c263ee7db"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga8808f69293d0bebbc8522c6c263ee7db">Cgu::u16gistream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ input stream for GIO streams for char16_t type. </p>
<p><a class="anchor" id="u16gistreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga77446d9796635382908ea8ffd32a278f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga77446d9796635382908ea8ffd32a278f">Cgu::u16gostream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ output stream for GIO streams for char16_t type. </p>
<p><a class="anchor" id="u16gostreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga5b4e68874a133ac65a42255af595c6b2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga5b4e68874a133ac65a42255af595c6b2">Cgu::u16gstreambuf</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ stream buffer for GIO streams for char16_t type. </p>

</div>
</div>
<a class="anchor" id="ga4e5293d03097caa9e1cae43627333358"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga4e5293d03097caa9e1cae43627333358">Cgu::u32giostream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ input/output stream for GIO streams for char32_t type. </p>
<p><a class="anchor" id="u32giostreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="gad065f53dddbd101396e6755a62fe9964"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#gad065f53dddbd101396e6755a62fe9964">Cgu::u32gistream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ input stream for GIO streams for char32_t type. </p>
<p><a class="anchor" id="u32gistreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga4bdb06d4a5e0d250bb0dc0f8ee2bcb12"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga4bdb06d4a5e0d250bb0dc0f8ee2bcb12">Cgu::u32gostream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ output stream for GIO streams for char32_t type. </p>
<p><a class="anchor" id="u32gostreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="gaf9472a0a51a96c1f2c8b22e3d825d7db"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#gaf9472a0a51a96c1f2c8b22e3d825d7db">Cgu::u32gstreambuf</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ stream buffer for GIO streams for char32_t type. </p>

</div>
</div>
<a class="anchor" id="ga863de0bd9fe72837bb7098c82f58dc6f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga863de0bd9fe72837bb7098c82f58dc6f">Cgu::wgiostream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ input/output stream for GIO streams for wchar_t type. </p>
<p><a class="anchor" id="wgiostreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga02f7d31dbb3f1589416d0455fe6a6b17"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga02f7d31dbb3f1589416d0455fe6a6b17">Cgu::wgistream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ input stream for GIO streams for wchar_t type. </p>
<p><a class="anchor" id="wgistreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga2e03297004baf396ee76a8444dc96db5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga2e03297004baf396ee76a8444dc96db5">Cgu::wgostream</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ output stream for GIO streams for wchar_t type. </p>
<p><a class="anchor" id="wgostreamAnchor"></a></p>

</div>
</div>
<a class="anchor" id="ga71b5bacd58d5d74d0d0e15f875f7d9db"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__gstreams.html#ga71b5bacd58d5d74d0d0e15f875f7d9db">Cgu::wgstreambuf</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>C++ stream buffer for GIO streams for wchar_t type. </p>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Mon Sep 16 2013 20:45:31 for c++-gtk-utils by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.4
</small></address>
</body>
</html>