blob: 408b05c06e31dd56b6557f4b90c7bf1521d77bb9 [file] [log] [blame]
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed
with this work for additional information regarding copyright
ownership. The ASF licenses this file to you under the Apache
License, Version 2.0 (the License); you may not use this file
except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied. See the License for the specific language governing
permissions and limitations under the License.
Copyright 1999-2007 Rogue Wave Software, Inc.
-->
<HTML>
<HEAD>
<TITLE>char_traits</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="cerr.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="cin.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library Reference Guide</B></DIV>
<H2>char_traits</H2>
<P><B>Library:</B>&nbsp;&nbsp;<A HREF="2-5.html">Strings</A></P>
<PRE><HR><B><I>Does not inherit</I></B><HR></PRE>
<UL>
<LI><A HREF="#sec1">Local Index</A></LI>
<LI><A HREF="#sec2">Summary</A></LI>
<LI><A HREF="#sec3">Synopsis</A></LI>
<LI><A HREF="#sec4">Specializations</A></LI>
<LI><A HREF="#sec5">Description</A></LI>
<LI><A HREF="#sec6">Interface</A></LI>
<LI><A HREF="#sec7">Member Types</A></LI>
<LI><A HREF="#sec8">Types: Default Values</A></LI>
<LI><A HREF="#sec9">Value Functions</A></LI>
<LI><A HREF="#sec10">Test Functions</A></LI>
<LI><A HREF="#sec11">Conversion Functions</A></LI>
<LI><A HREF="#sec12">See Also</A></LI>
<LI><A HREF="#sec13">Standards Conformance</A></LI>
</UL>
<A NAME="sec1"><H3>Local Index</H3></A>
<H4>Members</H4>
<UL><TABLE CELLPADDING=3>
<TR><TD VALIGN=top>
<A HREF="#idx463">assign()</A><BR>
<A HREF="#idx458">char_type</A><BR>
<A HREF="#idx471">compare()</A><BR>
<A HREF="#idx465">copy()</A><BR>
<A HREF="#idx466">eof()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx472">eq()</A><BR>
<A HREF="#idx473">eq_int_type()</A><BR>
<A HREF="#idx467">find()</A><BR>
<A HREF="#idx459">int_type</A><BR>
<A HREF="#idx468">length()</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx474">lt()</A><BR>
<A HREF="#idx469">move()</A><BR>
<A HREF="#idx470">not_eof()</A><BR>
<A HREF="#idx460">off_type</A><BR>
<A HREF="#idx461">pos_type</A><BR>
</TD>
<TD VALIGN=top><A HREF="#idx462">state_type</A><BR>
<A HREF="#idx475">to_char_type()</A><BR>
<A HREF="#idx476">to_int_type()</A><BR>
</TD></TR>
</TABLE></UL>
<A NAME="sec2"><H3>Summary</H3></A>
<P>A traits class with types and operations for the <B><I><A HREF="basic-string.html">basic_string</A></I></B> container and <B><I><A HREF="basic-iostream.html">iostream</A></I></B> classes</P>
<A NAME="sec3"><H3>Synopsis</H3></A>
<PRE>#include &lt;string&gt;
namespace std {
template&lt;class charT&gt;
struct char_traits;
}
</PRE>
<A NAME="sec4"><H3>Specializations</H3></A>
<UL><PRE>namespace std {
template&lt;&gt; struct char_traits&lt;char&gt;;
template&lt;&gt; struct char_traits&lt;wchar_t&gt;;
}
</PRE></UL>
<A NAME="sec5"><H3>Description</H3></A>
<P>The structure template <B><I>char_traits</I></B> defines the types and functions necessary to implement the iostreams and string class templates. It is templatized on <SAMP>charT</SAMP>, which represents the character container type. Each specialized version of <B><I>char_traits</I></B> includes the default definitions corresponding to the specialized character container type.</P>
<P>Users have to provide specialization for <B><I>char_traits</I></B> if they use character types other than <SAMP>char</SAMP> and <SAMP>wchar_t</SAMP>. </P>
<A NAME="sec6"><H3>Interface</H3></A>
<UL><PRE>namespace std {
template&lt;class charT&gt;
struct char_traits {
typedef charT char_type;
typedef INT_T int_type;
typedef POS_T pos_type;
typedef OFF_T off_type;
typedef STATE_T state_type;
static char_type to_char_type(const int_type&amp;);
static int_type to_int_type(const char_type&amp;);
static bool eq(const char_type&amp;,const char_type&amp;);
static bool eq_int_type(const int_type&amp;,
const int_type&amp;);
static int_type eof();
static int_type not_eof(const int_type&amp;);
static void assign(char_type&amp;,
const char_type&amp;);
static bool lt(const char_type&amp;,
const char_type&amp;);
static int compare(const char_type*,
const char_type*,size_t);
static size_t length(const char_type*);
static const char_type* find(const char_type*,int n,
const char_type&amp;);
static char_type* move(char_type*,
const char_type*,size_t);
static char_type* copy(char_type*,const char_type*,
size_t);
static char_type* assign(char_type*,size_t,
char_type);
};
}
</PRE></UL>
<A NAME="sec7"><H3>Member Types</H3></A>
<A NAME="idx458"></A><PRE><B>char_type</B></PRE>
<UL>
<P>The type <SAMP>char_type</SAMP> represents the character container type. It must be convertible to <SAMP>int_type</SAMP>.</P>
</UL>
<A NAME="idx459"></A><PRE><B>int_type</B></PRE>
<UL>
<P>The type <SAMP>int_type</SAMP> is another character container type that can also hold an end-of-file value. It is used as the return type of some of the iostream class member functions. If <SAMP>char_type</SAMP> is either <SAMP>char</SAMP> or <SAMP>wchar_t</SAMP>, <SAMP>int_type</SAMP> is <SAMP>int</SAMP> or <SAMP>wint_t</SAMP>, respectively.</P>
</UL>
<A NAME="idx460"></A><PRE><B>off_type</B></PRE>
<UL>
<P>The type <SAMP>off_type</SAMP> represents offsets to positional information. It is used to represent:</P>
<UL>
<LI><P CLASS="LIST">A signed displacement, measured in characters, from a specified position within a sequence.</P></LI>
<LI><P CLASS="LIST">An absolute position within a sequence.</P></LI>
</UL>
<P>The value <SAMP>off_type(-1)</SAMP> can be used as an error indicator. Value of type <SAMP>off_type</SAMP> can be converted to type <SAMP>pos_type</SAMP>, but no validity of the resulting <SAMP>pos_type</SAMP> value is ensured.</P>
<P>If <SAMP>char_type</SAMP> is either <SAMP>char</SAMP> or <SAMP>wchar_t</SAMP>, <SAMP>off_type</SAMP> is <SAMP>streamoff</SAMP>.</P>
</UL>
<A NAME="idx461"></A><PRE><B>pos_type</B></PRE>
<UL>
<P>The type <SAMP>pos_type</SAMP> describes an object that can store all the information necessary to restore an arbitrary sequence to a previous stream position and conversion state. The conversion <SAMP>pos_type(off_type(-1))</SAMP> constructs the invalid <SAMP>pos_type</SAMP> value to signal error.</P>
<P>If <SAMP>char_type</SAMP> is either <SAMP>char</SAMP> or <SAMP>wchar_t</SAMP>, <SAMP>pos_type</SAMP> is <SAMP>streampos</SAMP> or <SAMP>wstreampos</SAMP>, respectively.</P>
</UL>
<A NAME="idx462"></A><PRE><B>state_type</B></PRE>
<UL>
<P>The type <SAMP>state_type</SAMP> holds the conversion state, and is compatible with the function <SAMP>locale::codecvt()</SAMP>.</P>
<P>If <SAMP>char_type</SAMP> is either <SAMP>char</SAMP> or <SAMP>wchar_t</SAMP>, <SAMP>state_type</SAMP> is <SAMP>mbstate_t</SAMP>.</P>
</UL>
<A NAME="sec8"><H3>Types: Default Values</H3></A>
<P><A HREF="char-traits.html#Table&nbsp;12">Table&nbsp;12</A> lists the default specialization types and their values on <SAMP>char</SAMP> and <SAMP>wchar_t</SAMP>. </P>
<H4><A NAME="Table&nbsp;12">Table&nbsp;12: Default values for types</A></H4>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="3">
<tr><td valign=top><B>specialization type</B>
</td>
<td valign=top><B>on char</B>
</td>
<td valign=top><B>on wchar_t</B>
</td>
</tr>
<tr><td valign=top><P CLASS="TABLE"><SAMP>char_type</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>char</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>wchar_t</SAMP></P>
</td>
</tr>
<tr><td valign=top><P CLASS="TABLE"><SAMP>int_type</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>int</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>wint_t</SAMP></P>
</td>
</tr>
<tr><td valign=top><P CLASS="TABLE"><SAMP>off_type</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>streamoff</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>streamoff</SAMP></P>
</td>
</tr>
<tr><td valign=top><P CLASS="TABLE"><SAMP>pos_type</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>streampos</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>wstreampos</SAMP></P>
</td>
</tr>
<tr><td valign=top><P CLASS="TABLE"><SAMP>state_type</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>mbstate_t</SAMP></P>
</td>
<td valign=top><P CLASS="TABLE"><SAMP>mbstate_t</SAMP></P>
</td>
</tr>
</TABLE>
<A NAME="sec9"><H3>Value Functions</H3></A>
<A NAME="idx463"></A><PRE>void
<B>assign</B>(char_type&amp; c1, const char_type&amp; c2);</PRE>
<UL>
<P>Assigns one character value to another. The value of <SAMP>c2</SAMP> is assigned to <SAMP>c1</SAMP>.</P>
</UL>
<A NAME="idx464"></A><PRE>char_type*
<B>assign</B>(char_type* s, size_t n, char_type a);</PRE>
<UL>
<P>Assigns one character value to <SAMP>n</SAMP> elements of a character array. The value of <SAMP>a</SAMP> is assigned to <SAMP>n</SAMP> elements of <SAMP>s</SAMP>.</P>
</UL>
<A NAME="idx465"></A><PRE>char_type*
<B>copy</B>(char_type* s1, const char_type* s2, size_t n);</PRE>
<UL>
<P>Copies <SAMP>n</SAMP> characters from the object pointed to by <SAMP>s1</SAMP> into the object pointed to by <SAMP>s2</SAMP>. The ranges of <SAMP>(s1,s1+n)</SAMP> and <SAMP>(s2,s2+n)</SAMP> may not overlap.</P>
</UL>
<A NAME="idx466"></A><PRE>int_type
<B>eof</B>();</PRE>
<UL>
<P>Returns an <SAMP>int_type</SAMP> value that represents the end-of-file. It is returned by several functions to indicate end-of-file state, or to indicate an invalid return value.</P>
</UL>
<A NAME="idx467"></A><PRE>const char_type*
<B>find</B>(const char_type* s, int n, const char_type&amp; a);</PRE>
<UL>
<P>Looks for the value of <SAMP>a</SAMP> in <SAMP>s</SAMP>. Only <SAMP>n</SAMP> elements of <SAMP>s</SAMP> are examined. Returns a pointer to the matched element if one is found. Otherwise returns <SAMP>0</SAMP>.</P>
</UL>
<A NAME="idx468"></A><PRE>size_t
<B>length</B>(const char_type* s);</PRE>
<UL>
<P>Returns the length of a null terminated character string pointed to by <SAMP>s</SAMP>.</P>
</UL>
<A NAME="idx469"></A><PRE>char_type*
<B>move</B>(char_type* s1, const char_type* s2, size_t n);</PRE>
<UL>
<P>Moves <SAMP>n</SAMP> characters from the object pointed to by <SAMP>s1</SAMP> into the object pointed to by <SAMP>s2</SAMP>. The ranges of <SAMP>(s1,s1+n)</SAMP> and <SAMP>(s2,s2+n)</SAMP> may overlap.</P>
</UL>
<A NAME="idx470"></A><PRE>int_type
<B>not_eof</B>(const int_type&amp; c);</PRE>
<UL>
<P>Returns <SAMP>c</SAMP> if <SAMP>c</SAMP> is not equal to the end-of-file value. Otherwise returns <SAMP>0</SAMP>.</P>
</UL>
<A NAME="sec10"><H3>Test Functions</H3></A>
<A NAME="idx471"></A><PRE>int
<B>compare</B>(const char_type* s1,const char_type* s2,size_t n);</PRE>
<UL>
<P>Compares <SAMP>n</SAMP> values from <SAMP>s1</SAMP> with <SAMP>n</SAMP> values from <SAMP>s2</SAMP>. Returns <SAMP>1</SAMP> if <SAMP>s1</SAMP> is greater than <SAMP>s2</SAMP>, <SAMP>-1</SAMP> if <SAMP>s1</SAMP> is less than<SAMP> s2,</SAMP> or <SAMP>0</SAMP> if they are equal. </P>
</UL>
<A NAME="idx472"></A><PRE>bool
<B>eq</B>(const char_type&amp; c1, const char_type&amp; c2);</PRE>
<UL>
<P>Returns <SAMP>true</SAMP> if <SAMP>c1</SAMP> and <SAMP>c2</SAMP> represent the same character. </P>
</UL>
<A NAME="idx473"></A><PRE>bool
<B>eq_int_type</B>(const int_type&amp; c1, const int_type&amp; c2);</PRE>
<UL>
<P>Returns <SAMP>true</SAMP> if <SAMP>c1</SAMP> and <SAMP>c2</SAMP> are equal.</P>
</UL>
<A NAME="idx474"></A><PRE>bool
<B>lt</B>(const char_type&amp; c1,const char_type&amp; c2);</PRE>
<UL>
<P>Returns <SAMP>true</SAMP> if <SAMP>c1</SAMP> is less than <SAMP>c2</SAMP>.</P>
</UL>
<A NAME="sec11"><H3>Conversion Functions</H3></A>
<A NAME="idx475"></A><PRE>char_type
<B>to_char_type</B>(const int_type&amp; c);</PRE>
<UL>
<P>Converts a valid character represented by a value of type <SAMP>int_type</SAMP> to the corresponding <SAMP>char_type</SAMP> value. </P>
</UL>
<A NAME="idx476"></A><PRE>int_type
<B>to_int_type</B>(const char_type&amp; c);</PRE>
<UL>
<P>Converts a valid character represented by a value of type <SAMP>char_type</SAMP> to the corresponding <SAMP>int_type</SAMP> value.</P>
</UL>
<A NAME="sec12"><H3>See Also</H3></A>
<P><B><I>iosfwd</I></B>, <B><I><A HREF="fpos.html">fpos</A></I></B></P>
<A NAME="sec13"><H3>Standards Conformance</H3></A>
<P><I>ISO/IEC 14882:1998 -- International Standard for Information Systems --Programming Language C++, Section 21.1</I></P>
<BR>
<HR>
<A HREF="cerr.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="cin.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>