<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
    <TITLE>BidirectionalDevice</TITLE>
    <LINK REL="stylesheet" HREF="../../../../boost.css">
    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
</HEAD>
<BODY>

<!-- Begin Banner -->

    <H1 CLASS="title">BidirectionalDevice</H1>
    <HR CLASS="banner">

<!-- End Banner -->

<H2>Definition</H2>

<P>
    An BidirectionalDevice is a <A HREF="device.html">Device</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#bidirectional">bidirectional</A>.
</P>

<H2>Description</H2>

<P>
    An BidirectionalDevice provides read-access to a sequence of characters of a given type and write-access
    to a separate sequence of characters of the same type. An BidirectionalDevice may expose these sequences in three ways:<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A>
    <OL>
        <LI STYLE="list-style-type:lower-roman">
            by defining member functions <CODE>read</CODE> and <CODE>write</CODE> , invoked indirectly by the Iostreams Library through the functions <A HREF="../functions/read.html"><CODE>boost::iostreams::read</CODE></A> and <A HREF="../functions/write.html"><CODE>boost::iostreams::write</CODE></A>;
        </LI>
        <LI STYLE="list-style-type:lower-roman">
            by overloading or specializing <A HREF="../functions/read.html"><CODE>boost::iostreams::read</CODE></A> and <A HREF="../functions/write.html"><CODE>boost::iostreams::write</CODE></A>; or
        </LI>
        <LI STYLE="list-style-type:lower-roman">
            by defining member functions <CODE>input_sequence</CODE> and <CODE>output_sequence</CODE> returning pairs of pointers delimiting the two sequences in their entirety.
        </LI>
    </OL>
</P>

<P>The i/o mode of a BidirectionalDevice is <A HREF="../guide/modes.html#bidirectional">bidirectional</A> or <A HREF="../guide/modes.html#bidirectional_seekable">bidirectional-seekable</A>.</P>

<H2>Example</H2>

<P>A model of BidirectionalDevice can be defined as follows:</P>

<PRE CLASS="broken_ie"><SPAN CLASS="keyword">struct</SPAN> BidirectionalDevice {
    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                char_type;
    <SPAN CLASS="keyword">typedef</SPAN> bidirectional_device_tag    category;
    std::streamsize read(<SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n) 
        {
            <SPAN CLASS="comment">// Reads up to n characters from the input 
            // sequence into the buffer s, returning the number 
            // of characters read. Returning a value less than n 
            // indicates end-of-sequence.</SPAN>
        }
    std::streamsize write(<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n) 
        {
            <SPAN CLASS="comment">// Write up to n characters from the buffer
            // s to the output sequence, returning the 
            // number of characters written</SPAN>
        }
};</PRE>

<P>
    Here <CODE>category</CODE> is a tag <CODE>struct</CODE> identifying the containing type as a model of BidirectionalDevice. When defining a new BidirectionalDevice, it suffices to use the tag <CODE>bidirectional_device_tag</CODE>. One can also derive from the helper classes <A HREF="../classes/device.html"><CODE>device&lt;bidirectional&gt;</CODE></A> or <A HREF="../classes/device.html#synopsis"><CODE>wdevice&lt;bidirectional&gt;</CODE></A>.
</P>

<H2>Refinement of</H2>

<P><A HREF="source.html">Source</A>, <A HREF="sink.html">Sink</A>.</P>

<H2>Associated Types</H2>

<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>

<TABLE CELLPADDING="5" BORDER="1">
    <TR><TD>Category</TD><TD>A type convertible to <A HREF="../guide/traits.html#category_tags">device_tag</A> and to <A HREF="../guide/modes.html#mode_tags"><CODE>bidirectional</CODE></A></TD></TR>
</TABLE>

<H2>Notation</H2>

<TABLE CELLPADDING="2">
    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of BidirectionalDevice</TD></TR>
    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>D</CODE></TD></TR>
    <TR><TD><CODE>dev</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
    <TR><TD><CODE>s1</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></SPAN></TD></TR>
    <TR><TD><CODE>s2</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></SPAN></TD></TR>
    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
</TABLE>

<H2>Valid Expressions / Semantics</H2>

<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>

<TABLE CELLPADDING="5" BORDER="1">
    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
    <TR>
        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/read.html">boost::iostreams::read</A>(dev, s1, n)</CODE></PRE></TD>
        <TD><CODE>std::streamsize</CODE></TD>
        <TD ROWSPAN="2">Not convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
        <TD>
            Reads up to <CODE>n</CODE> characters from the input sequence controlled by <CODE>dev</CODE> into <CODE>s1</CODE>, returning the number of characters read; returning a value less than n indicates end-of-sequence
        </TD>
    </TR>
    <TR>
        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/write.html">boost::iostreams::write</A>(dev, s2, n)</CODE></PRE></TD>
        <TD><CODE>std::streamsize</CODE></TD>
        <TD>
            Writes up to <CODE>n</CODE> characters from the sequence beginning at <CODE>s2</CODE> to the sequence controlled by <CODE>dev</CODE>, returning the number of characters written
        </TD>
    </TR>
    <TR>
        <TD><PRE CLASS="plain_code"><CODE>dev.input_sequence()</CODE></PRE></TD>
        <TD><PRE CLASS="plain_code"><CODE>std::pair&lt;Ch*,Ch*&gt;</CODE></PRE></TD>
        <TD ROWSPAN="2">Convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
        <TD>Returns a pair of pointers delimiting the input sequence controlled by <CODE>dev</CODE></TD>
    </TR>
    <TR>
        <TD><PRE CLASS="plain_code"><CODE>dev.output_sequence()</CODE></PRE></TD>
        <TD><PRE CLASS="plain_code"><CODE>std::pair&lt;Ch*,Ch*&gt;</CODE></PRE></TD>
        <TD>Returns a pair of pointers delimiting the output sequence controlled by <CODE>dev</CODE></TD>
    </TR>
</TABLE>

<H2>Exceptions</H2>

<P>
    Errors which occur during the execution of member functions <CODE>read</CODE>, <CODE>write</CODE>, <CODE>input_sequence</CODE> or <CODE>output_sequence</CODE> are indicated by throwing exceptions. Reaching the end of the input sequence is not an error, but attempting to write past the end of the output sequence is.
</P>

<P>
    After an exception is thrown, an BidirectionalDevice must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour.
</P>


<H2>Models</H2>

<HR>

<!-- Begin Footnotes -->

<P>
    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>Strictly speaking, (i) and (ii) can be varied independently for input and output, so there are actually five possibilities.
</P>

<!-- End Footnotes -->

<!-- Begin Footer -->

<HR>
<P CLASS="copyright">Revised 02 Feb 2008</P>

<P CLASS="copyright">&copy; Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>&copy; Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
<P CLASS="copyright"> 
    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>)
</P>

<!-- End Footer -->

</BODY>