Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/iostreams/doc/guide/pipelines.html @ 29

Last change on this file since 29 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 6.0 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<HTML>
3<HEAD>
4    <TITLE>Pipelines</TITLE>
5    <LINK REL="stylesheet" HREF="../../../../boost.css">
6    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
7</HEAD>
8<BODY>
9
10<!-- Begin Banner -->
11
12    <H1 CLASS="title">User's Guide</H1>
13    <HR CLASS="banner">
14
15<!-- End Banner -->
16
17<!-- Begin Nav -->
18
19<DIV CLASS='nav'>
20     <A HREF='lifetimes.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/html/images/prev.png'></A>
21    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/html/images/up.png'></A>
22    <A HREF='views.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/html/images/next.png'></A>
23</DIV>
24
25<!-- End Nav -->
26
27<A NAME="overview"></A>
28<H2>3.8 Pipelines</H2>
29
30<DL class="page-index">
31  <DT><A href="#overview">Overview</A></DT>
32  <DT><A href="#examples">Examples</A></DT>
33  <DT><A href="#headers">Headers</A></DT>
34  <DT><A href="#reference">Reference</A></DT>
35</DL>
36
37<HR STYLE="margin-top:1em">
38
39<A NAME="overview"></A>
40<H2>Overview</H2>
41
42<P>
43    A pipeline is an expression of the form
44</P>
45<PRE CLASS="broken_ie">filter<SUB>1</SUB> | ... | filter<SUB>n</SUB> | filter-or-device</PRE>
46<P>
47consiting of one or more filters and an optional device, joined using <CODE>operator|</CODE>. Pipelines are a convenient way to pass chains of Filters and Devices to the constructor or <CODE>push</CODE> function of a <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> or <A HREF="../classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A>.
48</P>
49
50<P>
51    In order for instances of a model of Filter to appear in a pipeline, it must be declared <A HREF="../concepts/pipable.html">Pipable</A> using the macro <A HREF="#boost_iostreams_pipable"><CODE>BOOST_IOSTREAMS_PIPABLE</CODE></A>.
52</P>
53
54<P>
55   Pipelines for C++ filtering were introduced by Jan Christiaan van Winkel and John van Krieken. <I>See</I> <A CLASS="bib_ref" HREF="../bibliography.html#van_winkel">[van Winkel].</A> 
56</P>
57
58<A NAME="examples"></A>
59<H2>Examples</H2>
60
61<P>The following example defines a <A HREF="../concepts/pipable.html">Pipable</A> InputFilter.</P>
62
63<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/concepts.hpp'><SPAN CLASS='literal'>&lt;boost/iostreams/concepts.hpp&gt;</SPAN></A>
64<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/pipeline.hpp'><SPAN CLASS='literal'>&lt;boost/iostreams/pipeline.hpp&gt;</SPAN></A>
65
66<SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
67
68<SPAN CLASS="keyword">class</SPAN> my_filter : <SPAN CLASS="keyword">public</SPAN> io::input_filter {
69<SPAN CLASS="keyword">public:</SPAN>
70    <SPAN CLASS='omitted'>...</SPAN>
71    <SPAN CLASS="keyword">template</SPAN>&lt;<SPAN CLASS="keyword">typename</SPAN> Source&gt;
72    <SPAN CLASS="keyword">int</SPAN> get(Source& src)
73    {
74       <SPAN CLASS='omitted'> ...</SPAN>
75    }
76};
77BOOST_IOSTREAMS_PIPABLE(my_filter, 0)
78</PRE>
79
80<P>No semicolon is required (or allowed) following the macro invocation. The following example shows a <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> constructed from a pipeline</CODE>.</P>
81
82<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filtering_stream.hpp'><SPAN CLASS='literal'>&lt;boost/iostreams/filtering_stream.hpp&gt;</SPAN></A>
83<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/device/file.hpp'><SPAN CLASS='literal'>&lt;boost/iostreams/device/file.hpp&gt;</SPAN></A>
84<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filter/counter.hpp'><SPAN CLASS='literal'>&lt;boost/iostreams/filter/counter.hpp&gt;</SPAN></A>
85
86<SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
87
88<SPAN CLASS="keyword">int</SPAN> main()
89{
90    <SPAN CLASS='comment'>// Write to the file "hello," counting</SPAN>
91    <SPAN CLASS='comment'>// the number of lines and characters</SPAN>
92    io::filtering_ostream out(io::counter() | io::file("hello"));
93    <SPAN CLASS='omitted'>...</SPAN>
94}</PRE>
95
96<A NAME="headers"></A>
97<H2>Headers</H2>
98
99<DL class="page-index">
100  <DT><A CLASS="header" HREF="../../../../boost/iostreams/pipeline.hpp"><CODE>&lt;boost/iostreams/pipeline.hpp&gt;</CODE></A></DT>
101</DL>
102
103<A NAME="boost_iostreams_pipable"></A>
104<A NAME="reference"></A>
105<H2>Reference</H2>
106
107<PRE CLASS="broken_ie">
108
109<SPAN CLASS='preprocessor'>#define</SPAN> BOOST_IOSTREAMS_PIPABLE(filter, arity) <SPAN CLASS='omitted'>...</SPAN>
110
111</PRE>
112
113<H4>Description</H4>
114
115<P>Defines the overloads of <CODE>operator|</CODE> necessary for a <A HREF="../concepts/filter.html">Filter</A> to appear in pipelines.</P>
116
117<A NAME="macro_params"></A>
118<H4>Macro parameters</H4>
119
120<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
121<TR>
122    <TR>
123        <TD VALIGN="top"><I>filter</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
124        <TD>The name of the <A HREF="../concepts/filter.html">Filter</A> to be declared <A HREF="../concepts/pipable.html">Pipable</A></TD>
125    </TR>
126    <TR>
127        <TD VALIGN="top"><I>arity</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
128        <TD>The <A HREF="../concepts/filter.html">Filter</A>'s template arity, <I>i.e.</I>, the number or its template parameters; a value of <CODE>0</CODE> indicates that it is not a class template</TD>
129    </TR>
130</TABLE>
131
132<!-- Begin Footer -->
133
134<HR STYLE="margin-top:1em">
135<P CLASS="copyright">Revised
136<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
13720 May, 2004
138<!--webbot bot="Timestamp" endspan i-checksum="38504" -->
139</P>
140
141<P CLASS="copyright">&copy; Copyright <A HREF="http://www.kangaroologic.com" TARGET="_top">Jonathan Turkanis</A>, 2004</P>
142<P CLASS="copyright"> 
143    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
144</P>
145
146<!-- End Footer -->
147
148</BODY>
Note: See TracBrowser for help on using the repository browser.