| <!-- |
| 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> <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 <string> |
| |
| namespace std { |
| template<class charT> |
| struct char_traits; |
| } |
| </PRE> |
| <A NAME="sec4"><H3>Specializations</H3></A> |
| |
| <UL><PRE>namespace std { |
| template<> struct char_traits<char>; |
| template<> struct char_traits<wchar_t>; |
| } |
| </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<class charT> |
| 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&); |
| static int_type to_int_type(const char_type&); |
| static bool eq(const char_type&,const char_type&); |
| static bool eq_int_type(const int_type&, |
| const int_type&); |
| |
| static int_type eof(); |
| static int_type not_eof(const int_type&); |
| |
| static void assign(char_type&, |
| const char_type&); |
| static bool lt(const char_type&, |
| const char_type&); |
| 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&); |
| |
| 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 12">Table 12</A> lists the default specialization types and their values on <SAMP>char</SAMP> and <SAMP>wchar_t</SAMP>. </P> |
| <H4><A NAME="Table 12">Table 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& c1, const char_type& 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& 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& 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& c1, const char_type& 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& c1, const int_type& 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& c1,const char_type& 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& 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& 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> |