Files
boost_fusion/doc/html/fusion/sequences/operators/i_o.html
Tobias Schwinger ca6f831b96 adds documentation for functional module
[SVN r36959]
2007-02-15 23:11:24 +00:00

135 lines
11 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>I/O</title>
<link rel="stylesheet" href="../../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
<link rel="start" href="../../../index.html" title="Chapter 1. Fusion 2.0">
<link rel="up" href="../operators.html" title="Operators">
<link rel="prev" href="../operators.html" title="Operators">
<link rel="next" href="i_o/in.html" title="in">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%">
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.htm">Home</a></td>
<td align="center"><a href="../../../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../../../more/faq.htm">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../operators.html"><img src="../../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../operators.html"><img src="../../../images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../images/home.png" alt="Home"></a><a accesskey="n" href="i_o/in.html"><img src="../../../images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h4 class="title">
<a name="fusion.sequences.operators.i_o"></a><a href="i_o.html" title="I/O">I/O</a></h4></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="i_o/in.html">in</a></span></dt>
<dt><span class="section"><a href="i_o/out.html">out</a></span></dt>
</dl></div>
<p>
The I/O operators: <code class="computeroutput"><span class="special">&lt;&lt;</span></code>
and <code class="computeroutput"><span class="special">&gt;&gt;</span></code> work generically
on all Fusion sequences. The global <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></code> has been overloaded for generic
output streams such that <span class="underline">_sequence</span>_s
are output by recursively calling <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></code> for each element. Analogously,
the global <code class="computeroutput"><span class="keyword">operator</span><span class="special">&gt;&gt;</span></code>
has been overloaded to extract <span class="underline">_sequence</span>_s
from generic input streams by recursively calling <code class="computeroutput"><span class="keyword">operator</span><span class="special">&gt;&gt;</span></code> for each element.
</p>
<p>
The default delimiter between the elements is space, and the <a href="../../sequences.html" title="Sequences">Sequence</a>
is enclosed in parenthesis. For Example:
</p>
<pre class="programlisting">
<a href="../containers/vector.html" title="vector"><code class="computeroutput"><span class="identifier">vector</span></code></a><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="identifier">a</span><span class="special">(</span><span class="number">1.0f</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="string">"Howdy folks!"</span><span class="special">);</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">a</span><span class="special">;</span>
</pre>
<p>
outputs the <a href="../containers/vector.html" title="vector"><code class="computeroutput"><span class="identifier">vector</span></code></a> as: (1.0 2 Howdy folks!)
</p>
<p>
The library defines three manipulators for changing the default behavior:
</p>
<div class="variablelist">
<p class="title"><b>Manipulators</b></p>
<dl>
<dt><span class="term"><code class="computeroutput"><span class="identifier">tuple_open</span><span class="special">(</span><span class="identifier">arg</span><span class="special">)</span></code></span></dt>
<dd>
Defines the character that is output before the first element.
</dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">tuple_close</span><span class="special">(</span><span class="identifier">arg</span><span class="special">)</span></code></span></dt>
<dd>
Defines the character that is output after the last element.
</dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">tuple_delimiter</span><span class="special">(</span><span class="identifier">arg</span><span class="special">)</span></code></span></dt>
<dd>
Defines the delimiter character between elements.
</dd>
</dl>
</div>
<p>
The argument to <code class="computeroutput"><span class="identifier">tuple_open</span></code>,
<code class="computeroutput"><span class="identifier">tuple_close</span></code> and <code class="computeroutput"><span class="identifier">tuple_delimiter</span></code> may be a <code class="computeroutput"><span class="keyword">char</span></code>, <code class="computeroutput"><span class="keyword">wchar_t</span></code>,
a C-string, or a wide C-string.
</p>
<p>
Example:
</p>
<pre class="programlisting">
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">tuple_open</span><span class="special">(</span><span class="char">'['</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">tuple_close</span><span class="special">(</span><span class="char">']'</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">tuple_delimiter</span><span class="special">(</span><span class="string">", "</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">a</span><span class="special">;</span>
</pre>
<p>
outputs the same <a href="../containers/vector.html" title="vector"><code class="computeroutput"><span class="identifier">vector</span></code></a>, <code class="computeroutput"><span class="identifier">a</span></code>
as: [1.0, 2, Howdy folks!]
</p>
<p>
The same manipulators work with <code class="computeroutput"><span class="keyword">operator</span><span class="special">&gt;&gt;</span></code> and <code class="computeroutput"><span class="identifier">istream</span></code>
as well. Suppose the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cin</span></code>
stream contains the following data:
</p>
<pre class="programlisting">
<span class="special">(</span><span class="number">1</span> <span class="number">2</span> <span class="number">3</span><span class="special">)</span> <span class="special">[</span><span class="number">4</span><span class="special">:</span><span class="number">5</span><span class="special">]</span>
</pre>
<p>
The code:
</p>
<pre class="programlisting">
<a href="../containers/vector.html" title="vector"><code class="computeroutput"><span class="identifier">vector</span></code></a><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">i</span><span class="special">;</span>
<a href="../containers/vector.html" title="vector"><code class="computeroutput"><span class="identifier">vector</span></code></a><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span> <span class="identifier">j</span><span class="special">;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cin</span> <span class="special">&gt;&gt;</span> <span class="identifier">i</span><span class="special">;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cin</span> <span class="special">&gt;&gt;</span> <span class="identifier">set_open</span><span class="special">(</span><span class="char">'['</span><span class="special">)</span> <span class="special">&gt;&gt;</span> <span class="identifier">set_close</span><span class="special">(</span><span class="char">']'</span><span class="special">)</span> <span class="special">&gt;&gt;</span> <span class="identifier">set_delimiter</span><span class="special">(</span><span class="char">':'</span><span class="special">);</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cin</span> <span class="special">&gt;&gt;</span> <span class="identifier">j</span><span class="special">;</span>
</pre>
<p>
reads the data into the <span class="underline">_vector</span>_s
<code class="computeroutput"><span class="identifier">i</span></code> and <code class="computeroutput"><span class="identifier">j</span></code>.
</p>
<p>
Note that extracting <span class="underline">_sequence</span>_s
with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> or C-style string elements does
not generally work, since the streamed <a href="../../sequences.html" title="Sequences">Sequence</a>
representation may not be unambiguously parseable.
</p>
<a name="fusion.sequences.operators.i_o.header"></a><h5>
<a name="id1074150"></a>
<a href="i_o.html#fusion.sequences.operators.i_o.header">Header</a>
</h5>
<pre class="programlisting">
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">sequence</span><span class="special">/</span><span class="identifier">io</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
</pre>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><small>Copyright © 2001-2005 Joel de Guzman, Dan Marsden</small></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../operators.html"><img src="../../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../operators.html"><img src="../../../images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../images/home.png" alt="Home"></a><a accesskey="n" href="i_o/in.html"><img src="../../../images/next.png" alt="Next"></a>
</div>
</body>
</html>