<HTML>
<HEAD>
<TITLE>Example 1: Defining a Narrow Character Code Conversion (ASCII &lt;-&gt; EBCDIC)</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="40-2.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="40-4.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library User's Guide</B></DIV>
<H2>40.3 Example 1: Defining a Narrow Character Code Conversion (ASCII &lt;-&gt; EBCDIC)</H2>
<A NAME="idx951"><!></A>
<P>As an example of how file stream buffers and code conversion facets collaborate, we would now like to implement a code conversion facet that can translate text files encoded in EBCDIC into character streams encoded in ASCII. The conversion between ASCII characters and EBCDIC characters is a constant-size code conversion where each character is represented by one byte. Hence the conversion can be done on a character-by-character basis.</P>
<A NAME="idx952"><!></A>
<P>To implement and use an ASCII-EBCDIC code conversion facet, we:</P>
<OL>
<LI><P CLASS="LIST">Derive a new facet type from the standard code conversion facet type <SAMP>std::codecvt</SAMP>.</P></LI>
<LI><P CLASS="LIST">Specialize the new facet type for the character type <SAMP>char</SAMP>.</P></LI>
<LI><P CLASS="LIST">Implement the member functions that are used by the file buffer.</P></LI>
<LI><P CLASS="LIST">Imbue a file stream's buffer with a locale that carries an ASCII-EBCDIC code conversion facet.</P></LI>
</OL>
<P>The following sections explain these steps in detail.</P>
<A NAME="idx953"><!></A>
<A NAME="4031"><H3>40.3.1 Derive a New Facet Type</H3></A>
<A NAME="idx954"><!></A>
<P>Here is the new code conversion facet type <SAMP>AsciiEbcdicConversion</SAMP>:</P>

<UL><PRE>
template &lt;class internT, class externT, class stateT&gt;
class AsciiEbcdicConversion
  : public std::codecvt&lt;internT, externT, stateT&gt;
{ };
</PRE></UL>
<P>It is empty because we will specialize the class template for the character type <SAMP>char</SAMP>.</P>
<A NAME="idx955"><!></A>
<A NAME="4032"><H3>40.3.2 Specialize the New Facet Type and Implement the Member Functions</H3></A>
<P>Each code conversion facet has two main member functions, <SAMP>in()</SAMP> and <SAMP>out()</SAMP>:</P>
<UL>
<LI><P CLASS="LIST">The public member function <SAMP>in()</SAMP> is responsible for the conversion done on reading from the external device.</P></LI>
<LI><P CLASS="LIST">The public member function <SAMP>out()</SAMP> is responsible for the conversion necessary for writing to the external device.</P></LI>
</UL>
<P>The other member functions of a code conversion facet used by a file stream buffer are: </P>
<UL>
<LI><P CLASS="LIST">The public member function <SAMP>always_noconv()</SAMP>, which returns <SAMP>true</SAMP> if no conversion is performed by the facet. This is because file stream buffers might want to bypass the code conversion facet when no conversion is necessary; for example, when the external encoding is identical to the internal. Our facet obviously will perform a conversion and does not want to be bypassed, so <SAMP>always_noconv()</SAMP> returns <SAMP>false</SAMP> in our example. </P></LI>
<LI><P CLASS="LIST">The public member function <SAMP>encoding()</SAMP>, which provides information about the type of conversion; that is, whether it is state-dependent or constant-size, etc. In our example, the conversion is constant-size. The function <SAMP>encoding()</SAMP> is supposed to return the size of the internal characters, which is 1 because the file buffer uses an ASCII encoding internally.</P></LI>
</UL>
<A NAME="idx956"><!></A>
<P>All public member functions of a facet call the respective, protected virtual member function, named <SAMP>do_...()</SAMP>. Here is the declaration of the specialized facet type:</P>

<UL><PRE>
template &lt;&gt;
class AsciiEbcdicConversion&lt;char, char, std::mbstate_t&gt;
: public std::codecvt&lt;char, char, std::mbstate_t&gt;
{
protected:

 virtual std::codecvt_base::result
 do_in (std::mbstate_t&amp; state, const char* from,
        const char* from_end,  const char*&amp; from_next,
        char* to,              char* to_limit,
        char*&amp; to_next) const;

 virtual std::codecvt_base::result
 do_out(std::mbstate_t&amp; state,
        const char* from,       const char* from_end,
        const char*&amp; from_next, char* to,
        char* to_limit,         char*&amp; to_next) const;

 virtual
 bool do_always_noconv() const throw(){ 
   return false;
 }

 int do_encoding() const throw(){
     return  1;
 }

};
</PRE></UL>
<P>For the sake of brevity, we implement only those functions used by this implementation of file stream buffers. If you want to provide a code conversion facet that is more widely usable, you must also override the virtual member functions <SAMP>do_length()</SAMP> and <SAMP>do_max_length()</SAMP>. </P>
<P>The implementation of the functions <SAMP>do_in()</SAMP> and <SAMP>do_out()</SAMP> is straightforward. Each of the functions translates a sequence of characters in the range <SAMP>[from,from_end)</SAMP> into the corresponding sequence <SAMP>[to,to_end)</SAMP>. The pointers <SAMP>from_next</SAMP> and <SAMP>to_next</SAMP> point one beyond the last character successfully converted. In principle, you can do whatever you want, or whatever it takes, in these functions. However, for effective communication with the file stream buffer, it is important to indicate success or failure properly.</P>
<A NAME="4033"><H3>40.3.3 Use the New Code Conversion Facet</H3></A>
<A NAME="idx957"><!></A>
<P>Here is an example of how the new code conversion facet can be used:</P>

<UL><PRE>
std::fstream inout("/tmp/fil");                               //1
AsciiEbcdicConversion&lt;char,char,std::mbstate_t&gt; cvtfac;
std::locale cvtloc(std::locale(),&amp;cvtfac);
inout.rdbuf()-&gt;pubimbue(cvtloc)                               //2
std::cout &lt;&lt; inout.rdbuf();                                   //3
</PRE></UL>
<TABLE CELLPADDING="3">

<TR VALIGN="top"><TD><SAMP>//1</SAMP></TD><TD>When a file is created, a snapshot of the current global locale is attached as the default locale. Remember that a stream has two locale objects: one used for formatting numeric items, and a second used by the stream's buffer for code conversions.
<TR VALIGN="top"><TD><SAMP>//2</SAMP></TD><TD>Here the stream buffer's locale is replaced by a copy of the global locale that has an ASCII-EBCDIC code conversion facet.
<TR VALIGN="top"><TD><SAMP>//3</SAMP></TD><TD>The content of the EBCDIC file <SAMP>"/tmp/fil"</SAMP> is read, automatically converted to ASCII, and written to <SAMP>std::cout</SAMP>.
</TABLE>

<BR>
<HR>
<A HREF="40-2.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="40-4.html"><IMG SRC="images/bnext.gif" WIDTH=20 HEIGHT=21 ALT="Next file" BORDER=O></A>

<!-- Google Analytics tracking code -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
    _uacct = "UA-1775151-1";
    urchinTracker();
</script>
<!-- end of Google Analytics tracking code -->

</BODY>
</HTML>
