| 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 
|---|
| 2 | <HTML> | 
|---|
| 3 | <HEAD> | 
|---|
| 4 |     <TITLE>Array Devices</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">Null Devices</H1> | 
|---|
| 13 |     <HR CLASS="banner"> | 
|---|
| 14 |  | 
|---|
| 15 | <!-- End Banner --> | 
|---|
| 16 |  | 
|---|
| 17 | <DL class="page-index"> | 
|---|
| 18 |   <DT><A href="#overview">Overview</A></DT> | 
|---|
| 19 |   <DT><A href="#acknowledgments">Acknowledgments</A></DT> | 
|---|
| 20 |   <DT><A href="#headers">Headers</A></DT> | 
|---|
| 21 |   <DT><A href="#reference">Reference</A> | 
|---|
| 22 |     <DL> | 
|---|
| 23 |       <DT><A href="#null_source">Class template <CODE>basic_null_source</CODE></A></DT> | 
|---|
| 24 |       <DT><A href="#null_sink">Class template <CODE>basic_null_sink</CODE></A></DT> | 
|---|
| 25 |       <DT><A href="#null_device">Class template <CODE>basic_null_device</CODE></A></DT> | 
|---|
| 26 |     </DL> | 
|---|
| 27 |   </DT> | 
|---|
| 28 | </DL> | 
|---|
| 29 |  | 
|---|
| 30 | <HR> | 
|---|
| 31 |  | 
|---|
| 32 | <A NAME="overview"></A> | 
|---|
| 33 | <H2>Overview</H2> | 
|---|
| 34 |  | 
|---|
| 35 | <P> | 
|---|
| 36 |     The class templates <CODE>basic_null_source</CODE>, <CODE>basic_null_sink</CODE> and <CODE>basic_null_device</CODE> are models of Device whose member functions all have trivial implementations. A <CODE>basic_null_source</CODE> is a <A HREF="../concepts/source.html">Source</A> whose member function <CODE>read</CODE> returns <CODE>-1</CODE>, indicating end-of-sequence. A <CODE>basic_null_sink</CODE> is a <A HREF="../concepts/sink.html">Sink</A> whose member function <CODE>write</CODE> consumes and ignores the characters passed to it. A <CODE>basic_null_device</CODE> combines — depending on its template parameter <A HREF="#null_device_params"><CODE>Mode</CODE></A> — the trivial <CODE>read</CODE> and <CODE>write</CODE> functions just described with a member <CODE>seek</CODE> that always returns an invalid stream position. | 
|---|
| 37 | </P> | 
|---|
| 38 |  | 
|---|
| 39 | <P> | 
|---|
| 40 |     In addition, each of the above templates is <A HREF='../concepts/closable.html'>Closable</A>, with a no-op implementation of <CODE>close</CODE>. | 
|---|
| 41 | </P> | 
|---|
| 42 |  | 
|---|
| 43 | <A NAME="acknowledgments"></A> | 
|---|
| 44 | <H2>Acknowledgments</H2> | 
|---|
| 45 |  | 
|---|
| 46 | <P> | 
|---|
| 47 |     The templates described here were inspired by <A HREF="../../../../people/daryle_walker.html" TARGET="_top">Daryle Walker's</A> <CODE>basic_nullbuf</CODE> template. <I>See</I> <A HREF="http://cvs.sourceforge.net/viewcvs.py/boost-sandbox/boost-sandbox/libs/io/doc/null_stream.html" TARGET="_top">Disconnected Streams</A>. | 
|---|
| 48 | </P> | 
|---|
| 49 |  | 
|---|
| 50 | <A NAME="headers"></A> | 
|---|
| 51 | <H2>Headers</H2> | 
|---|
| 52 |  | 
|---|
| 53 | <DL class="page-index"> | 
|---|
| 54 |   <DT><A CLASS="header" HREF="../../../../boost/iostreams/device/null.hpp"><CODE><boost/iostreams/device/null.hpp></CODE></A></DT> | 
|---|
| 55 | </DL> | 
|---|
| 56 |  | 
|---|
| 57 | <A NAME="reference"></A> | 
|---|
| 58 | <H2>Reference</H2> | 
|---|
| 59 |  | 
|---|
| 60 | <A NAME="null_source"></A> | 
|---|
| 61 | <H3>Class template <CODE>basic_null_source</CODE></H3> | 
|---|
| 62 |  | 
|---|
| 63 | <H4>Description</H4> | 
|---|
| 64 |  | 
|---|
| 65 | <P>Model of <A HREF="../concepts/source.html">Source</A> whose member function <CODE>read</CODE> returns <CODE>-1</CODE>, indicating end-of-sequence.</P> | 
|---|
| 66 |  | 
|---|
| 67 | <H4>Synopsis</H4> | 
|---|
| 68 |  | 
|---|
| 69 | <PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams { | 
|---|
| 70 |  | 
|---|
| 71 | <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#null_source_params">Ch</A>> | 
|---|
| 72 | <SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#null_source_params">basic_null_source</A> {  | 
|---|
| 73 | <SPAN CLASS="keyword">public</SPAN>: | 
|---|
| 74 |     <SPAN CLASS="keyword">typedef</SPAN> Ch                        char_type; | 
|---|
| 75 |     <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category; | 
|---|
| 76 |  | 
|---|
| 77 |     <A CLASS="documented" HREF="#null_source_ctor">basic_null_source</A>();     | 
|---|
| 78 |     std::streamsize <A CLASS="documented" HREF="#null_source_read">read</A>(char_type* s, std::streamsize n); | 
|---|
| 79 |     <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#null_source_close'>close</A>(); | 
|---|
| 80 | }; | 
|---|
| 81 |  | 
|---|
| 82 | <SPAN CLASS='keyword'>typedef</SPAN> basic_null_source<<SPAN CLASS='keyword'>char</SPAN>>     <SPAN CLASS='defined'>null_source</SPAN>; | 
|---|
| 83 | <SPAN CLASS='keyword'>typedef</SPAN> basic_null_source<<SPAN CLASS='keyword'>wchar_t</SPAN>>  <SPAN CLASS='defined'>wnull_source</SPAN>; | 
|---|
| 84 |  | 
|---|
| 85 | } } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE> | 
|---|
| 86 |  | 
|---|
| 87 | <A NAME="null_source_params"></A> | 
|---|
| 88 | <H4>Template parameters</H4> | 
|---|
| 89 |  | 
|---|
| 90 | <TABLE STYLE="margin-left:2em"> | 
|---|
| 91 | <TR> | 
|---|
| 92 |     <TD><P><I>Ch</I></TD><TD VALIGN="top">-</TD> | 
|---|
| 93 |     <TD><P>The <A HREF='../guide/traits.html#char_type'>character type</A> type.</TD> | 
|---|
| 94 | </TR> | 
|---|
| 95 | </TABLE> | 
|---|
| 96 |  | 
|---|
| 97 | <A NAME="null_source_ctor"></A> | 
|---|
| 98 |  | 
|---|
| 99 | <H4><CODE>basic_null_source::basic_null_source</CODE></H4> | 
|---|
| 100 |  | 
|---|
| 101 | <A NAME="null_source_ctor"></A> | 
|---|
| 102 | <PRE CLASS="broken_ie">    basic_null_source();</PRE> | 
|---|
| 103 |  | 
|---|
| 104 | <P>Constructs a <CODE>basic_null_source</CODE>.</P> | 
|---|
| 105 |  | 
|---|
| 106 | <A NAME="null_source_read"></A> | 
|---|
| 107 | <H4><CODE>basic_null_source::read</CODE></H4> | 
|---|
| 108 |  | 
|---|
| 109 | <PRE CLASS="broken_ie">    std::streamsize read(char_type* s, std::streamsize n);</PRE> | 
|---|
| 110 |  | 
|---|
| 111 | <P>Returns <CODE>-1</CODE>.</P> | 
|---|
| 112 |  | 
|---|
| 113 | <A NAME="null_source_close"></A> | 
|---|
| 114 | <H4><CODE>basic_null_source::close</CODE></H4> | 
|---|
| 115 |  | 
|---|
| 116 | <PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE> | 
|---|
| 117 |  | 
|---|
| 118 | <P>No-op.</P> | 
|---|
| 119 |  | 
|---|
| 120 | <A NAME="null_sink"></A> | 
|---|
| 121 | <H3>Class template <CODE>basic_null_sink</CODE></H3> | 
|---|
| 122 |  | 
|---|
| 123 | <H4>Description</H4> | 
|---|
| 124 |  | 
|---|
| 125 | <P>Model of <A HREF="../concepts/sink.html">Sink</A> whose member function <CODE>write</CODE> consumes and ignores the contents of the character buffer passed to it. | 
|---|
| 126 |  | 
|---|
| 127 | <H4>Synopsis</H4> | 
|---|
| 128 |  | 
|---|
| 129 | <PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams { | 
|---|
| 130 |  | 
|---|
| 131 | <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#null_sink_params">Ch</A>> | 
|---|
| 132 | <SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#null_sink_params">basic_null_sink</A> {  | 
|---|
| 133 | <SPAN CLASS="keyword">public</SPAN>: | 
|---|
| 134 |     <SPAN CLASS="keyword">typedef</SPAN> Ch                        char_type; | 
|---|
| 135 |     <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category; | 
|---|
| 136 |  | 
|---|
| 137 |     <A CLASS="documented" HREF="#null_sink_ctor">basic_null_sink</A>(); | 
|---|
| 138 |     std::streamsize <A CLASS="documented" HREF="#null_sink_write">write</A>(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n); | 
|---|
| 139 |     <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#null_sink_close'>close</A>(); | 
|---|
| 140 | }; | 
|---|
| 141 |  | 
|---|
| 142 | <SPAN CLASS='keyword'>typedef</SPAN> basic_null_sink<<SPAN CLASS='keyword'>char</SPAN>>     <SPAN CLASS='defined'>null_sink</SPAN>; | 
|---|
| 143 | <SPAN CLASS='keyword'>typedef</SPAN> basic_null_sink<<SPAN CLASS='keyword'>wchar_t</SPAN>>  <SPAN CLASS='defined'>wnull_sink</SPAN>; | 
|---|
| 144 |  | 
|---|
| 145 | } } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE> | 
|---|
| 146 |  | 
|---|
| 147 | <A NAME="null_sink_params"></A> | 
|---|
| 148 | <H4>Template parameters</H4> | 
|---|
| 149 |  | 
|---|
| 150 | <TABLE STYLE="margin-left:2em"> | 
|---|
| 151 | <TR> | 
|---|
| 152 |     <TD><P><I>Ch</I></TD><TD VALIGN="top">-</TD> | 
|---|
| 153 |     <TD><P>The <A HREF='../guide/traits.html#char_type'>character type</A> type.</TD> | 
|---|
| 154 | </TR> | 
|---|
| 155 | </TABLE> | 
|---|
| 156 |  | 
|---|
| 157 | <A NAME="null_sink_ctor"></A> | 
|---|
| 158 |  | 
|---|
| 159 | <H4><CODE>basic_null_sink::basic_null_sink</CODE></H4> | 
|---|
| 160 |  | 
|---|
| 161 | <A NAME="null_sink_ctor"></A> | 
|---|
| 162 | <PRE CLASS="broken_ie">    basic_null_sink();</PRE> | 
|---|
| 163 |  | 
|---|
| 164 | <P>Constructs a <CODE>basic_null_sink</CODE>.</P> | 
|---|
| 165 |  | 
|---|
| 166 | <A NAME="null_sink_write"></A> | 
|---|
| 167 | <H4><CODE>basic_null_sink::write</CODE></H4> | 
|---|
| 168 |  | 
|---|
| 169 | <PRE CLASS="broken_ie">    std::streamsize write(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n);</PRE> | 
|---|
| 170 |  | 
|---|
| 171 | <P>Returns <CODE>n</CODE>.</P> | 
|---|
| 172 |  | 
|---|
| 173 | <A NAME="null_sink_close"></A> | 
|---|
| 174 | <H4><CODE>basic_null_sink::close</CODE></H4> | 
|---|
| 175 |  | 
|---|
| 176 | <PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE> | 
|---|
| 177 |  | 
|---|
| 178 | <P>No-op.</P> | 
|---|
| 179 |  | 
|---|
| 180 | <A NAME="null_device"></A> | 
|---|
| 181 | <H3>Class template <CODE>basic_null_device</CODE></H3> | 
|---|
| 182 |  | 
|---|
| 183 | <H4>Description</H4> | 
|---|
| 184 |  | 
|---|
| 185 | <P>Model of <A HREF="../concepts/seekable_device.html">Device</A> whose mode is specified as a template parameter, and whose member functions have trivial implementations, as follows:</P> | 
|---|
| 186 | <UL> | 
|---|
| 187 | <LI><CODE>read</CODE> returns <CODE>-1</CODE>, indicating end-of-sequence | 
|---|
| 188 | <LI><CODE>write</CODE> consumes but ignores the entire contents of the character buffer passed to it | 
|---|
| 189 | <LI><CODE>seek</CODE> consumes but ignores the entire contents of the character buffer passed to it | 
|---|
| 190 | </UL> | 
|---|
| 191 |  | 
|---|
| 192 | <H4>Synopsis</H4> | 
|---|
| 193 |  | 
|---|
| 194 | <PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams { | 
|---|
| 195 |  | 
|---|
| 196 | <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#null_device_params">Ch</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#null_device_params">Mode</A>> | 
|---|
| 197 | <SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#null_device_params">basic_null_device</A> { | 
|---|
| 198 | <SPAN CLASS="keyword">public</SPAN>:     | 
|---|
| 199 |     <SPAN CLASS="keyword">typedef</SPAN> Ch                        char_type; | 
|---|
| 200 |     <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category; | 
|---|
| 201 |  | 
|---|
| 202 |     <A CLASS="documented" HREF="#null_device_ctor">basic_null_device</A>(); | 
|---|
| 203 |     std::streamsize <A CLASS="documented" HREF="#null_device_read">read</A>(char_type* s, std::streamsize n); | 
|---|
| 204 |     std::streamsize <A CLASS="documented" HREF="#null_device_write">write</A>(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n); | 
|---|
| 205 |     <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> <A CLASS='documented' HREF='#null_device_seek'>seek</A>( <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> off, std::ios_base::seekdir way, | 
|---|
| 206 |                         std::ios_base::openmode which = | 
|---|
| 207 |                             std::ios_base::in | std::ios_base::out ); | 
|---|
| 208 |     <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#null_device_close'>close</A>(); | 
|---|
| 209 | }; | 
|---|
| 210 |  | 
|---|
| 211 | } } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE> | 
|---|
| 212 |  | 
|---|
| 213 | <A NAME="null_device_params"></A> | 
|---|
| 214 | <H4>Template parameters</H4> | 
|---|
| 215 |  | 
|---|
| 216 | <TABLE STYLE="margin-left:2em"> | 
|---|
| 217 | <TR> | 
|---|
| 218 |     <TD><P><I>Ch</I></TD><TD VALIGN="top">-</TD> | 
|---|
| 219 |     <TD><P>The <A HREF='../guide/traits.html#char_type'>character type</A>.</TD> | 
|---|
| 220 | </TR> | 
|---|
| 221 | <TR> | 
|---|
| 222 |     <TD><P><I>Mode</I></TD><TD VALIGN="top">-</TD> | 
|---|
| 223 |     <TD><P>The <A HREF='../guide/modes.html'>mode</A>.</TD> | 
|---|
| 224 | </TR> | 
|---|
| 225 | </TABLE> | 
|---|
| 226 |  | 
|---|
| 227 | <A NAME="null_device_ctor"></A> | 
|---|
| 228 | <H4><CODE>basic_null_device::basic_null_device</CODE></H4> | 
|---|
| 229 |  | 
|---|
| 230 | <PRE CLASS="broken_ie">    basic_null_device();</PRE> | 
|---|
| 231 |  | 
|---|
| 232 | <P>Constructs a <CODE>basic_null_device</CODE>.</P> | 
|---|
| 233 |  | 
|---|
| 234 | <A NAME="null_device_read"></A> | 
|---|
| 235 | <H4><CODE>basic_null_device::read</CODE></H4> | 
|---|
| 236 |  | 
|---|
| 237 | <PRE CLASS="broken_ie">    std::streamsize read(char_type* s, std::streamsize n);</PRE> | 
|---|
| 238 |  | 
|---|
| 239 | <P>Returns <CODE>-1</CODE>. Enabled if <CODE>Mode</CODE> refines <A HREF='../guide/modes.html#mode_tags'><CODE>input</CODE></A>.</P> | 
|---|
| 240 |  | 
|---|
| 241 | <A NAME="null_device_write"></A> | 
|---|
| 242 | <H4><CODE>basic_null_device::write</CODE></H4> | 
|---|
| 243 |  | 
|---|
| 244 | <PRE CLASS="broken_ie">    std::streamsize write(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n);</PRE> | 
|---|
| 245 |  | 
|---|
| 246 | <P>Returns <CODE>n</CODE>. Enabled if <CODE>Mode</CODE> refines <A HREF='../guide/modes.html#mode_tags'><CODE>output</CODE></A>.</P> | 
|---|
| 247 |  | 
|---|
| 248 | <A NAME="null_device_seek"></A> | 
|---|
| 249 | <H4><CODE>basic_null_device::seek</CODE></H4> | 
|---|
| 250 |  | 
|---|
| 251 | <PRE CLASS="broken_ie">     <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> seek( <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> off, std::ios_base::seekdir way, | 
|---|
| 252 |                          std::ios_base::openmode which = | 
|---|
| 253 |                              std::ios_base::in | std::ios_base::out );</PRE> | 
|---|
| 254 |  | 
|---|
| 255 | <P>Returns an invalid stream position. Enabled if <CODE>Mode</CODE> permits random access.</P> | 
|---|
| 256 |  | 
|---|
| 257 | <A NAME="null_device_close"></A> | 
|---|
| 258 | <H4><CODE>basic_null_device::close</CODE></H4> | 
|---|
| 259 |  | 
|---|
| 260 | <PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE> | 
|---|
| 261 |  | 
|---|
| 262 | <P>No-op.</P> | 
|---|
| 263 |  | 
|---|
| 264 | <!-- Begin Footer --> | 
|---|
| 265 |  | 
|---|
| 266 | <HR> | 
|---|
| 267 | <P CLASS="copyright">Revised | 
|---|
| 268 | <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan --> | 
|---|
| 269 | 20 May, 2004 | 
|---|
| 270 | <!--webbot bot="Timestamp" endspan i-checksum="38504" --> | 
|---|
| 271 | </P> | 
|---|
| 272 |  | 
|---|
| 273 | <P CLASS="copyright">© Copyright <A HREF="http://www.kangaroologic.com" TARGET="_top">Jonathan Turkanis</A>, 2004</P> | 
|---|
| 274 | <P CLASS="copyright">  | 
|---|
| 275 |     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>) | 
|---|
| 276 | </P> | 
|---|
| 277 |  | 
|---|
| 278 | <!-- End Footer --> | 
|---|
| 279 |  | 
|---|
| 280 | </BODY> | 
|---|