Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > media > main-release > by-pkgid > ee493823148ed6fb895c827f4e36eb1c > files > 948

xerces-c-doc-2.7.0-7mdv2008.1.x86_64.rpm

<HTML><HEAD><SCRIPT language="JavaScript" src="../resources/script.js" type="text/javascript"></SCRIPT><TITLE>Xerces-C++: XMLString.hpp Source File</TITLE><link href="XercesApi.css" rel="stylesheet" type="text/css"></HEAD><BODY alink="#ff0000" bgcolor="#ffffff" leftmargin="4" link="#0000ff" marginheight="4" marginwidth="4" text="#000000" topmargin="4" vlink="#0000aa"><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" height="60" rowspan="3" valign="top" width="135"><IMG border="0" height="60" hspace="0" src="../resources/logo.gif" vspace="0" width="135"></TD><TD align="left" colspan="4" height="5" valign="top" width="456"><IMG border="0" height="5" hspace="0" src="../resources/line.gif" vspace="0" width="456"></TD><TD align="left" height="60" rowspan="3" valign="top" width="29"><IMG border="0" height="60" hspace="0" src="../resources/right.gif" vspace="0" width="29"></TD></TR><TR><TD align="left" bgcolor="#0086b2" colspan="4" height="35" valign="top" width="456"><IMG alt="" border="0" height="35" hspace="0" src="../graphics/api-header.jpg" vspace="0" width="456"></TD></TR><TR><TD align="left" height="20" valign="top" width="168"><IMG border="0" height="20" hspace="0" src="../resources/bottom.gif" vspace="0" width="168"></TD><TD align="left" height="20" valign="top" width="96"><A href="http://xml.apache.org/" onMouseOut="rolloverOff('xml');" onMouseOver="rolloverOn('xml');" target="new"><IMG alt="http://xml.apache.org/" border="0" height="20" hspace="0" name="xml" onLoad="rolloverLoad('xml','../resources/button-xml-hi.gif','../resources/button-xml-lo.gif');" src="../resources/button-xml-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.apache.org/" onMouseOut="rolloverOff('asf');" onMouseOver="rolloverOn('asf');" target="new"><IMG alt="http://www.apache.org/" border="0" height="20" hspace="0" name="asf" onLoad="rolloverLoad('asf','../resources/button-asf-hi.gif','../resources/button-asf-lo.gif');" src="../resources/button-asf-lo.gif" vspace="0" width="96"></A></TD><TD align="left" height="20" valign="top" width="96"><A href="http://www.w3.org/" onMouseOut="rolloverOff('w3c');" onMouseOver="rolloverOn('w3c');" target="new"><IMG alt="http://www.w3.org/" border="0" height="20" hspace="0" name="w3c" onLoad="rolloverLoad('w3c','../resources/button-w3c-hi.gif','../resources/button-w3c-lo.gif');" src="../resources/button-w3c-lo.gif" vspace="0" width="96"></A></TD></TR></TABLE><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD align="left" valign="top" width="120"><IMG border="0" height="14" hspace="0" src="../resources/join.gif" vspace="0" width="120"><BR>
  <A href="../../index.html" onMouseOut="rolloverOff('side-ext-2');" onMouseOver="rolloverOn('side-ext-2');"><IMG alt="Home" border="0" height="12" hspace="0" name="side-ext-2" onLoad="rolloverLoad('side-ext-2','../graphics/ext-2-label-2.jpg','../graphics/ext-2-label-3.jpg');" src="../graphics/ext-2-label-3.jpg" vspace="0" width="120"></A><BR>

  <IMG border="0" height="6" hspace="0" src="../resources/separator.gif" vspace="0" width="120"><BR>

     <A href="../index.html" onMouseOut="rolloverOff('side-index');" onMouseOver="rolloverOn('side-index');"><IMG alt="Readme" border="0" height="12" hspace="0" name="side-index" onLoad="rolloverLoad('side-index','../graphics/index-label-2.jpg','../graphics/index-label-3.jpg');" src="../graphics/index-label-3.jpg" vspace="0" width="120"></A><BR>
     <A href="../charter.html" onMouseOut="rolloverOff('side-charter');" onMouseOver="rolloverOn('side-charter');"><IMG alt="Charter" border="0" height="12" hspace="0" name="side-charter" onLoad="rolloverLoad('side-charter','../graphics/charter-label-2.jpg','../graphics/charter-label-3.jpg');" src="../graphics/charter-label-3.jpg" vspace="0" width="120"></A><BR>
     <A href="../releases.html" onMouseOut="rolloverOff('side-releases');" onMouseOver="rolloverOn('side-releases');"><IMG alt="Release Info" border="0" height="12" hspace="0" name="side-releases" onLoad="rolloverLoad('side-releases','../graphics/releases-label-2.jpg','../graphics/releases-label-3.jpg');" src="../graphics/releases-label-3.jpg" vspace="0" width="120"></A><BR>
     
     




  <IMG border="0" height="6" hspace="0" src="../resources/separator.gif" vspace="0" width="120"><BR>

     <A href="../install.html" onMouseOut="rolloverOff('side-install');" onMouseOver="rolloverOn('side-install');"><IMG alt="Installation" border="0" height="12" hspace="0" name="side-install" onLoad="rolloverLoad('side-install','../graphics/install-label-2.jpg','../graphics/install-label-3.jpg');" src="../graphics/install-label-3.jpg" vspace="0" width="120"></A><BR>
     <A href="http://xml.apache.org/xerces-c/download.cgi" onMouseOut="rolloverOff('side-ext-20');" onMouseOver="rolloverOn('side-ext-20');"><IMG alt="Download" border="0" height="12" hspace="0" name="side-ext-20" onLoad="rolloverLoad('side-ext-20','../graphics/ext-20-label-2.jpg','../graphics/ext-20-label-3.jpg');" src="../graphics/ext-20-label-3.jpg" vspace="0" width="120"></A><BR>
     <A href="../build.html" onMouseOut="rolloverOff('side-build');" onMouseOver="rolloverOn('side-build');"><IMG alt="Build Instructions" border="0" height="12" hspace="0" name="side-build" onLoad="rolloverLoad('side-build','../graphics/build-label-2.jpg','../graphics/build-label-3.jpg');" src="../graphics/build-label-3.jpg" vspace="0" width="120"></A><BR>
     
     
     

  <IMG border="0" height="6" hspace="0" src="../resources/separator.gif" vspace="0" width="120"><BR>

     <A href="../faqs.html" onMouseOut="rolloverOff('side-faqs');" onMouseOver="rolloverOn('side-faqs');"><IMG alt="FAQs" border="0" height="12" hspace="0" name="side-faqs" onLoad="rolloverLoad('side-faqs','../graphics/faqs-label-2.jpg','../graphics/faqs-label-3.jpg');" src="../graphics/faqs-label-3.jpg" vspace="0" width="120"></A><BR>

     <A href="../samples.html" onMouseOut="rolloverOff('side-samples');" onMouseOver="rolloverOn('side-samples');"><IMG alt="Samples" border="0" height="12" hspace="0" name="side-samples" onLoad="rolloverLoad('side-samples','../graphics/samples-label-2.jpg','../graphics/samples-label-3.jpg');" src="../graphics/samples-label-3.jpg" vspace="0" width="120"></A><BR>
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

     <A href="../api.html" onMouseOut="rolloverOff('side-api');" onMouseOver="rolloverOn('side-api');"><IMG alt="API Docs" border="0" height="12" hspace="0" name="side-api" onLoad="rolloverLoad('side-api','../graphics/api-label-2.jpg','../graphics/api-label-3.jpg');" src="../graphics/api-label-3.jpg" vspace="0" width="120"></A><BR>

  <IMG border="0" height="6" hspace="0" src="../resources/separator.gif" vspace="0" width="120"><BR>

     <A href="../ApacheDOMC++Binding.html" onMouseOut="rolloverOff('side-ext-70');" onMouseOver="rolloverOn('side-ext-70');"><IMG alt="DOM C++ Binding" border="0" height="12" hspace="0" name="side-ext-70" onLoad="rolloverLoad('side-ext-70','../graphics/ext-70-label-2.jpg','../graphics/ext-70-label-3.jpg');" src="../graphics/ext-70-label-3.jpg" vspace="0" width="120"></A><BR>

     <IMG alt="Programming" border="0" height="12" hspace="0" src="../graphics/program-label-1.jpg" vspace="0" width="120"><BR>
     
     
     
     
     
     
     

     <A href="../migrate.html" onMouseOut="rolloverOff('side-migrate');" onMouseOver="rolloverOn('side-migrate');"><IMG alt="Migration Guide" border="0" height="12" hspace="0" name="side-migrate" onLoad="rolloverLoad('side-migrate','../graphics/migrate-label-2.jpg','../graphics/migrate-label-3.jpg');" src="../graphics/migrate-label-3.jpg" vspace="0" width="120"></A><BR>
     
     
  <IMG border="0" height="6" hspace="0" src="../resources/separator.gif" vspace="0" width="120"><BR>

  <A href="../feedback.html" onMouseOut="rolloverOff('side-feedback');" onMouseOver="rolloverOn('side-feedback');"><IMG alt="Feedback" border="0" height="12" hspace="0" name="side-feedback" onLoad="rolloverLoad('side-feedback','../graphics/feedback-label-2.jpg','../graphics/feedback-label-3.jpg');" src="../graphics/feedback-label-3.jpg" vspace="0" width="120"></A><BR>
  <A href="bug-report.html" onMouseOut="rolloverOff('side-bug-report');" onMouseOver="rolloverOn('side-bug-report');"><IMG alt="Bug-Reporting" border="0" height="12" hspace="0" name="side-bug-report" onLoad="rolloverLoad('side-bug-report','../graphics/bug-report-label-2.jpg','../graphics/bug-report-label-3.jpg');" src="../graphics/bug-report-label-3.jpg" vspace="0" width="120"></A><BR>
  <A href="../pdf.html" onMouseOut="rolloverOff('side-pdf');" onMouseOver="rolloverOn('side-pdf');"><IMG alt="PDF Document" border="0" height="12" hspace="0" name="side-pdf" onLoad="rolloverLoad('side-pdf','../graphics/pdf-label-2.jpg','../graphics/pdf-label-3.jpg');" src="../graphics/pdf-label-3.jpg" vspace="0" width="120"></A><BR>

  <IMG border="0" height="6" hspace="0" src="../resources/separator.gif" vspace="0" width="120"><BR>

   
<A href="http://svn.apache.org/viewcvs.cgi/xerces/?root=Apache-SVN" onMouseOut="rolloverOff('side-ext-102');" onMouseOver="rolloverOn('side-ext-102');"><IMG alt="Source Repository" border="0" height="12" hspace="0" name="side-ext-102" onLoad="rolloverLoad('side-ext-102','../graphics/ext-102-label-2.jpg','../graphics/ext-102-label-3.jpg');" src="../graphics/ext-102-label-3.jpg" vspace="0" width="120"></A><BR>

   
<A href="http://marc.theaimsgroup.com/?l=xerces-c-users" onMouseOut="rolloverOff('side-ext-104');" onMouseOver="rolloverOn('side-ext-104');"><IMG alt="User Mail Archive" border="0" height="12" hspace="0" name="side-ext-104" onLoad="rolloverLoad('side-ext-104','../graphics/ext-104-label-2.jpg','../graphics/ext-104-label-3.jpg');" src="../graphics/ext-104-label-3.jpg" vspace="0" width="120"></A><BR>

   
<A href="http://marc.theaimsgroup.com/?l=xerces-c-dev" onMouseOut="rolloverOff('side-ext-106');" onMouseOver="rolloverOn('side-ext-106');"><IMG alt="Devel Mail Archive" border="0" height="12" hspace="0" name="side-ext-106" onLoad="rolloverLoad('side-ext-106','../graphics/ext-106-label-2.jpg','../graphics/ext-106-label-3.jpg');" src="../graphics/ext-106-label-3.jpg" vspace="0" width="120"></A><BR>




<IMG border="0" height="14" hspace="0" src="../resources/close.gif" vspace="0" width="120"><BR></TD><TD align="left" valign="top" width="500"><TABLE border="0" cellpadding="3" cellspacing="0"><TR><TD>
    <TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#FFFFFF" colspan="2" width="494"><TABLE border="0" cellpadding="0" cellspacing="0" width="494"><TR><TD bgcolor="#039acc" height="1" width="1"><IMG border="0" height="1" hspace="0" src="../resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#039acc" height="1" width="492"><IMG border="0" height="1" hspace="0" src="../resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="../resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#039acc" width="1"><IMG border="0" height="1" hspace="0" src="../resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#0086b2" width="492"><FONT color="#ffffff" face="arial,helvetica,sanserif" size="+1"><IMG border="0" height="2" hspace="0" src="../resources/void.gif" vspace="0" width="2"><B>API Docs for SAX and DOM</B></FONT></TD><TD bgcolor="#017299" width="1"><IMG border="0" height="1" hspace="0" src="../resources/void.gif" vspace="0" width="1"></TD></TR><TR><TD bgcolor="#0086b2" height="1" width="1"><IMG border="0" height="1" hspace="0" src="../resources/void.gif" vspace="0" width="1"></TD><TD bgcolor="#017299" height="1" width="492"><IMG border="0" height="1" hspace="0" src="../resources/void.gif" vspace="0" width="492"></TD><TD bgcolor="#017299" height="1" width="1"><IMG border="0" height="1" hspace="0" src="../resources/void.gif" vspace="0" width="1"></TD></TR></TABLE></TD></TR><TR><TD width="10">&nbsp;</TD><TD width="484"><FONT color="#000000" face="arial,helvetica,sanserif">

	    <P>
<!-- Generated by Doxygen 1.4.1 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<div class="nav">
<a class="el" href="dir_000000.html">src</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">xercesc</a>&nbsp;/&nbsp;<a class="el" href="dir_000003.html">util</a></div>
<h1>XMLString.hpp</h1><a href="XMLString_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
00002 <span class="comment"> * Copyright 1999-2004 The Apache Software Foundation.</span>
00003 <span class="comment"> * </span>
00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
00006 <span class="comment"> * You may obtain a copy of the License at</span>
00007 <span class="comment"> * </span>
00008 <span class="comment"> *      http://www.apache.org/licenses/LICENSE-2.0</span>
00009 <span class="comment"> * </span>
00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
00014 <span class="comment"> * limitations under the License.</span>
00015 <span class="comment"> */</span>
00016 
00017 <span class="comment">/*</span>
00018 <span class="comment"> * $Log$</span>
00019 <span class="comment"> * Revision 1.34  2005/04/05 17:00:45  cargilld</span>
00020 <span class="comment"> * Implement version of lowercase that only check a to z, instead of all characters, and don't rely on functionality provided in the transcoders.</span>
00021 <span class="comment"> *</span>
00022 <span class="comment"> * Revision 1.33  2005/03/20 19:02:45  cargilld</span>
00023 <span class="comment"> * Implement versions of uppercase and compareIstring that only check a to z, instead of all characters, and don't rely on functionality provided in the transcoders.</span>
00024 <span class="comment"> *</span>
00025 <span class="comment"> * Revision 1.32  2005/03/08 09:04:09  amassari</span>
00026 <span class="comment"> * Improve performances of XMLString::tokenizeString (jira# 1363) - patch by Christian Will</span>
00027 <span class="comment"> *</span>
00028 <span class="comment"> * Revision 1.31  2004/12/21 16:02:51  cargilld</span>
00029 <span class="comment"> * Attempt to fix various apidoc problems.</span>
00030 <span class="comment"> *</span>
00031 <span class="comment"> * Revision 1.30  2004/12/14 02:09:20  cargilld</span>
00032 <span class="comment"> * Performance update from Christian Will.</span>
00033 <span class="comment"> *</span>
00034 <span class="comment"> * Revision 1.29  2004/12/06 10:47:01  amassari</span>
00035 <span class="comment"> * Added XMLString::release(void**, MemoryManager*) [jira# 1301]</span>
00036 <span class="comment"> *</span>
00037 <span class="comment"> * Revision 1.28  2004/09/08 13:56:24  peiyongz</span>
00038 <span class="comment"> * Apache License Version 2.0</span>
00039 <span class="comment"> *</span>
00040 <span class="comment"> * Revision 1.27  2004/09/02 19:08:09  cargilld</span>
00041 <span class="comment"> * Fix API Doc warning message</span>
00042 <span class="comment"> *</span>
00043 <span class="comment"> * Revision 1.26  2004/08/11 16:07:27  peiyongz</span>
00044 <span class="comment"> * isValidNOTATION</span>
00045 <span class="comment"> *</span>
00046 <span class="comment"> * Revision 1.25  2004/05/25 18:11:32  peiyongz</span>
00047 <span class="comment"> * removeChar() added</span>
00048 <span class="comment"> *</span>
00049 <span class="comment"> * Revision 1.24  2004/03/10 17:35:17  amassari</span>
00050 <span class="comment"> * Fix documentation for binToText (bug# 9207)</span>
00051 <span class="comment"> *</span>
00052 <span class="comment"> * Revision 1.23  2003/12/24 15:24:13  cargilld</span>
00053 <span class="comment"> * More updates to memory management so that the static memory manager.</span>
00054 <span class="comment"> *</span>
00055 <span class="comment"> * Revision 1.22  2003/12/17 20:00:49  cargilld</span>
00056 <span class="comment"> * Update for memory management so that the static memory manager (one</span>
00057 <span class="comment"> * used to call Initialize) is only for static data.</span>
00058 <span class="comment"> *</span>
00059 <span class="comment"> * Revision 1.21  2003/12/17 00:18:35  cargilld</span>
00060 <span class="comment"> * Update to memory management so that the static memory manager (one used to call Initialize) is only for static data.</span>
00061 <span class="comment"> *</span>
00062 <span class="comment"> * Revision 1.20  2003/10/02 11:07:26  gareth</span>
00063 <span class="comment"> * Made the non-memory manager version of replicate not inlined. Updated the documentation for the memory manager versions so they don't tell you you should call release.</span>
00064 <span class="comment"> *</span>
00065 <span class="comment"> * Revision 1.19  2003/10/01 00:22:20  knoaman</span>
00066 <span class="comment"> * Add a lastIndexOf method that takes the string length as one of the params.</span>
00067 <span class="comment"> *</span>
00068 <span class="comment"> * Revision 1.18  2003/08/25 20:39:47  neilg</span>
00069 <span class="comment"> * fix XMLString::findAny(...) docs so that they match what the method actually does (and has done since time immemorial)</span>
00070 <span class="comment"> *</span>
00071 <span class="comment"> * Revision 1.17  2003/05/18 14:02:05  knoaman</span>
00072 <span class="comment"> * Memory manager implementation: pass per instance manager.</span>
00073 <span class="comment"> *</span>
00074 <span class="comment"> * Revision 1.16  2003/05/15 19:07:46  knoaman</span>
00075 <span class="comment"> * Partial implementation of the configurable memory manager.</span>
00076 <span class="comment"> *</span>
00077 <span class="comment"> * Revision 1.15  2003/04/21 20:07:05  knoaman</span>
00078 <span class="comment"> * Performance: use memcpy in moveChars and replicate.</span>
00079 <span class="comment"> *</span>
00080 <span class="comment"> * Revision 1.14  2003/02/25 16:42:31  tng</span>
00081 <span class="comment"> * [Bug 7072] Documentation for XMLString::transcode states invalid return value.</span>
00082 <span class="comment"> *</span>
00083 <span class="comment"> * Revision 1.13  2003/02/05 18:50:56  tng</span>
00084 <span class="comment"> * [Bug 11915] Utility for freeing memory.</span>
00085 <span class="comment"> *</span>
00086 <span class="comment"> * Revision 1.12  2003/01/24 23:16:33  peiyongz</span>
00087 <span class="comment"> * removeWS() added;</span>
00088 <span class="comment"> *</span>
00089 <span class="comment"> * Revision 1.11  2002/12/20 22:10:21  tng</span>
00090 <span class="comment"> * XML 1.1</span>
00091 <span class="comment"> *</span>
00092 <span class="comment"> * Revision 1.10  2002/12/18 14:17:54  gareth</span>
00093 <span class="comment"> * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf.</span>
00094 <span class="comment"> *</span>
00095 <span class="comment"> * Revision 1.9  2002/12/04 02:32:43  knoaman</span>
00096 <span class="comment"> * #include cleanup.</span>
00097 <span class="comment"> *</span>
00098 <span class="comment"> * Revision 1.8  2002/11/05 17:42:39  peiyongz</span>
00099 <span class="comment"> * equals( const char* const, const char* const)</span>
00100 <span class="comment"> *</span>
00101 <span class="comment"> * Revision 1.7  2002/11/04 15:22:05  tng</span>
00102 <span class="comment"> * C++ Namespace Support.</span>
00103 <span class="comment"> *</span>
00104 <span class="comment"> * Revision 1.6  2002/10/01 19:45:22  tng</span>
00105 <span class="comment"> * Performance in XMLString::equals, only need to check one string for null as they are equal already.</span>
00106 <span class="comment"> *</span>
00107 <span class="comment"> * Revision 1.5  2002/09/24 19:41:21  tng</span>
00108 <span class="comment"> * New inline function equals that is modified from compareString but simply return true or false.</span>
00109 <span class="comment"> *</span>
00110 <span class="comment"> * Revision 1.4  2002/09/23 18:42:18  tng</span>
00111 <span class="comment"> * DOM L3: Support baseURI.   Add utility fixURI to transform an absolute path filename to standard URI form.</span>
00112 <span class="comment"> *</span>
00113 <span class="comment"> * Revision 1.3  2002/08/27 19:24:43  peiyongz</span>
00114 <span class="comment"> * Bug#12087: patch from Thomas Ford (tom@decisionsoft.com)</span>
00115 <span class="comment"> *</span>
00116 <span class="comment"> * Revision 1.2  2002/02/20 18:17:02  tng</span>
00117 <span class="comment"> * [Bug 5977] Warnings on generating apiDocs.</span>
00118 <span class="comment"> *</span>
00119 <span class="comment"> * Revision 1.1.1.1  2002/02/01 22:22:16  peiyongz</span>
00120 <span class="comment"> * sane_include</span>
00121 <span class="comment"> *</span>
00122 <span class="comment"> * Revision 1.26  2001/08/10 16:23:06  peiyongz</span>
00123 <span class="comment"> * isHex(), isAlphaNum(), isAllWhiteSpace() and patternMatch() Added</span>
00124 <span class="comment"> *</span>
00125 <span class="comment"> * Revision 1.25  2001/07/06 20:27:57  peiyongz</span>
00126 <span class="comment"> * isValidaQName()</span>
00127 <span class="comment"> *</span>
00128 <span class="comment"> * Revision 1.24  2001/07/04 14:38:20  peiyongz</span>
00129 <span class="comment"> * IDDatatypeValidator: created</span>
00130 <span class="comment"> * DatatypeValidatorFactory: IDDTV enabled</span>
00131 <span class="comment"> * XMLString:isValidName(): to validate Name (XML [4][5])</span>
00132 <span class="comment"> *</span>
00133 <span class="comment"> * Revision 1.23  2001/06/13 14:07:55  peiyongz</span>
00134 <span class="comment"> * isValidaEncName() to validate an encoding name (EncName)</span>
00135 <span class="comment"> *</span>
00136 <span class="comment"> * Revision 1.22  2001/05/23 15:44:51  tng</span>
00137 <span class="comment"> * Schema: NormalizedString fix.  By Pei Yong Zhang.</span>
00138 <span class="comment"> *</span>
00139 <span class="comment"> * Revision 1.21  2001/05/11 13:26:31  tng</span>
00140 <span class="comment"> * Copyright update.</span>
00141 <span class="comment"> *</span>
00142 <span class="comment"> * Revision 1.20  2001/05/09 18:43:30  tng</span>
00143 <span class="comment"> * Add StringDatatypeValidator and BooleanDatatypeValidator.  By Pei Yong Zhang.</span>
00144 <span class="comment"> *</span>
00145 <span class="comment"> * Revision 1.19  2001/05/03 20:34:35  tng</span>
00146 <span class="comment"> * Schema: SchemaValidator update</span>
00147 <span class="comment"> *</span>
00148 <span class="comment"> * Revision 1.18  2001/05/03 19:17:35  knoaman</span>
00149 <span class="comment"> * TraverseSchema Part II.</span>
00150 <span class="comment"> *</span>
00151 <span class="comment"> * Revision 1.17  2001/03/21 21:56:13  tng</span>
00152 <span class="comment"> * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar.</span>
00153 <span class="comment"> *</span>
00154 <span class="comment"> * Revision 1.16  2001/03/02 20:52:46  knoaman</span>
00155 <span class="comment"> * Schema: Regular expression - misc. updates for error messages,</span>
00156 <span class="comment"> * and additions of new functions to XMLString class.</span>
00157 <span class="comment"> *</span>
00158 <span class="comment"> * Revision 1.15  2001/01/15 21:26:34  tng</span>
00159 <span class="comment"> * Performance Patches by David Bertoni.</span>
00160 <span class="comment"> *</span>
00161 <span class="comment"> * Details: (see xerces-c-dev mailing Jan 14)</span>
00162 <span class="comment"> * XMLRecognizer.cpp: the internal encoding string XMLUni::fgXMLChEncodingString</span>
00163 <span class="comment"> * was going through this function numerous times.  As a result, the top hot-spot</span>
00164 <span class="comment"> * for the parse was _wcsicmp().  The real problem is that the Microsofts wide string</span>
00165 <span class="comment"> * functions are unbelievably slow.  For things like encodings, it might be</span>
00166 <span class="comment"> * better to use a special comparison function that only considers a-z and</span>
00167 <span class="comment"> * A-Z as characters with case.  This works since the character set for</span>
00168 <span class="comment"> * encodings is limit to printable ASCII characters.</span>
00169 <span class="comment"> *</span>
00170 <span class="comment"> *  XMLScanner2.cpp: This also has some case-sensitive vs. insensitive compares.</span>
00171 <span class="comment"> * They are also much faster.  The other tweak is to only make a copy of an attribute</span>
00172 <span class="comment"> * string if it needs to be split.  And then, the strategy is to try to use a</span>
00173 <span class="comment"> * stack-based buffer, rather than a dynamically-allocated one.</span>
00174 <span class="comment"> *</span>
00175 <span class="comment"> * SAX2XMLReaderImpl.cpp: Again, more case-sensitive vs. insensitive comparisons.</span>
00176 <span class="comment"> *</span>
00177 <span class="comment"> * KVStringPair.cpp &amp; hpp: By storing the size of the allocation, the storage can</span>
00178 <span class="comment"> * likely be re-used many times, cutting down on dynamic memory allocations.</span>
00179 <span class="comment"> *</span>
00180 <span class="comment"> * XMLString.hpp: a more efficient implementation of stringLen().</span>
00181 <span class="comment"> *</span>
00182 <span class="comment"> * DTDValidator.cpp: another case of using a stack-based buffer when possible</span>
00183 <span class="comment"> *</span>
00184 <span class="comment"> * These patches made a big difference in parse time in some of our test</span>
00185 <span class="comment"> * files, especially the ones are very attribute-heavy.</span>
00186 <span class="comment"> *</span>
00187 <span class="comment"> * Revision 1.14  2000/10/13 22:47:57  andyh</span>
00188 <span class="comment"> * Fix bug (failure to null-terminate result) in XMLString::trim().</span>
00189 <span class="comment"> * Patch contributed by Nadav Aharoni</span>
00190 <span class="comment"> *</span>
00191 <span class="comment"> * Revision 1.13  2000/04/12 18:42:15  roddey</span>
00192 <span class="comment"> * Improved docs in terms of what 'max chars' means in the method</span>
00193 <span class="comment"> * parameters.</span>
00194 <span class="comment"> *</span>
00195 <span class="comment"> * Revision 1.12  2000/04/06 19:42:51  rahulj</span>
00196 <span class="comment"> * Clarified how big the target buffer should be in the API</span>
00197 <span class="comment"> * documentation.</span>
00198 <span class="comment"> *</span>
00199 <span class="comment"> * Revision 1.11  2000/03/23 01:02:38  roddey</span>
00200 <span class="comment"> * Updates to the XMLURL class to correct a lot of parsing problems</span>
00201 <span class="comment"> * and to add support for the port number. Updated the URL tests</span>
00202 <span class="comment"> * to test some of this new stuff.</span>
00203 <span class="comment"> *</span>
00204 <span class="comment"> * Revision 1.10  2000/03/20 23:00:46  rahulj</span>
00205 <span class="comment"> * Moved the inline definition of stringLen before the first</span>
00206 <span class="comment"> * use. This satisfied the HP CC compiler.</span>
00207 <span class="comment"> *</span>
00208 <span class="comment"> * Revision 1.9  2000/03/02 19:54:49  roddey</span>
00209 <span class="comment"> * This checkin includes many changes done while waiting for the</span>
00210 <span class="comment"> * 1.1.0 code to be finished. I can't list them all here, but a list is</span>
00211 <span class="comment"> * available elsewhere.</span>
00212 <span class="comment"> *</span>
00213 <span class="comment"> * Revision 1.8  2000/02/24 20:05:26  abagchi</span>
00214 <span class="comment"> * Swat for removing Log from API docs</span>
00215 <span class="comment"> *</span>
00216 <span class="comment"> * Revision 1.7  2000/02/16 18:51:52  roddey</span>
00217 <span class="comment"> * Fixed some facts in the docs and reformatted the docs to stay within</span>
00218 <span class="comment"> * a reasonable line width.</span>
00219 <span class="comment"> *</span>
00220 <span class="comment"> * Revision 1.6  2000/02/16 17:07:07  abagchi</span>
00221 <span class="comment"> * Added API docs</span>
00222 <span class="comment"> *</span>
00223 <span class="comment"> * Revision 1.5  2000/02/06 07:48:06  rahulj</span>
00224 <span class="comment"> * Year 2K copyright swat.</span>
00225 <span class="comment"> *</span>
00226 <span class="comment"> * Revision 1.4  2000/01/12 00:16:23  roddey</span>
00227 <span class="comment"> * Changes to deal with multiply nested, relative pathed, entities and to deal</span>
00228 <span class="comment"> * with the new URL class changes.</span>
00229 <span class="comment"> *</span>
00230 <span class="comment"> * Revision 1.3  1999/12/18 00:18:10  roddey</span>
00231 <span class="comment"> * More changes to support the new, completely orthagonal support for</span>
00232 <span class="comment"> * intrinsic encodings.</span>
00233 <span class="comment"> *</span>
00234 <span class="comment"> * Revision 1.2  1999/12/15 19:41:28  roddey</span>
00235 <span class="comment"> * Support for the new transcoder system, where even intrinsic encodings are</span>
00236 <span class="comment"> * done via the same transcoder abstraction as external ones.</span>
00237 <span class="comment"> *</span>
00238 <span class="comment"> * Revision 1.1.1.1  1999/11/09 01:05:52  twl</span>
00239 <span class="comment"> * Initial checkin</span>
00240 <span class="comment"> *</span>
00241 <span class="comment"> * Revision 1.2  1999/11/08 20:45:21  rahul</span>
00242 <span class="comment"> * Swat for adding in Product name and CVS comment log variable.</span>
00243 <span class="comment"> *</span>
00244 <span class="comment"> */</span>
00245 
00246 <span class="preprocessor">#if !defined(XMLSTRING_HPP)</span>
<a name="l00247"></a><a class="code" href="XMLString_8hpp.html#a0">00247</a> <span class="preprocessor"></span><span class="preprocessor">#define XMLSTRING_HPP</span>
00248 <span class="preprocessor"></span>
00249 <span class="preprocessor">#include &lt;xercesc/util/BaseRefVectorOf.hpp&gt;</span>
00250 <span class="preprocessor">#include &lt;xercesc/framework/XMLBuffer.hpp&gt;</span>
00251 <span class="preprocessor">#include &lt;<a class="code" href="MemoryManager_8hpp.html">xercesc/framework/MemoryManager.hpp</a>&gt;</span>
00252 <span class="preprocessor">#include &lt;string.h&gt;</span>
00253 <span class="preprocessor">#include &lt;assert.h&gt;</span>
00254 
00255 <a class="code" href="XercesDefs_8hpp.html#a3">XERCES_CPP_NAMESPACE_BEGIN</a>
00256 
00257 <span class="keyword">class </span><a class="code" href="classXMLLCPTranscoder.html">XMLLCPTranscoder</a>;
<a name="l00269"></a><a class="code" href="classXMLString.html">00269</a> <span class="keyword">class </span><a class="code" href="XercesDefs_8hpp.html#a9"></a> XMLString
00270 {
00271 <span class="keyword">public</span>:
00272     <span class="comment">/* Static methods for native character mode string manipulation */</span>
00273 
00274 
00291     <span class="keyword">static</span> <span class="keywordtype">void</span> catString
00292     (
00293                 <span class="keywordtype">char</span>* <span class="keyword">const</span>     target
00294         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>     src
00295     );
00296 
00309     <span class="keyword">static</span> <span class="keywordtype">void</span> catString
00310     (
00311                 XMLCh* <span class="keyword">const</span>    target
00312         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    src
00313     );
00315 
00329     <span class="keyword">static</span> <span class="keywordtype">int</span> compareIString
00330     (
00331         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     str1
00332         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>     str2
00333     );
00334 
00345     <span class="keyword">static</span> <span class="keywordtype">int</span> compareIString
00346     (
00347         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    str1
00348         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2
00349     );
00350 
00362     <span class="keyword">static</span> <span class="keywordtype">int</span> compareIStringASCII
00363     (
00364         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    str1
00365         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2
00366     );
00367 
00368 
00369 
00383     <span class="keyword">static</span> <span class="keywordtype">int</span> compareNString
00384     (
00385         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     str1
00386         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>     str2
00387         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    count
00388     );
00389 
00403     <span class="keyword">static</span> <span class="keywordtype">int</span> compareNString
00404     (
00405         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    str1
00406         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2
00407         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    count
00408     );
00409 
00410 
00424     <span class="keyword">static</span> <span class="keywordtype">int</span> compareNIString
00425     (
00426         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     str1
00427         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>     str2
00428         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    count
00429     );
00430 
00445     <span class="keyword">static</span> <span class="keywordtype">int</span> compareNIString
00446     (
00447         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    str1
00448         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2
00449         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    count
00450     );
00451 
00464     <span class="keyword">static</span> <span class="keywordtype">int</span> compareString
00465     (
00466         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     str1
00467         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>     str2
00468     );
00469 
00481     <span class="keyword">static</span> <span class="keywordtype">int</span> compareString
00482     (
00483         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    str1
00484         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2
00485     );
00486 
00495     <span class="keyword">static</span> <span class="keywordtype">bool</span> equals
00496     (
00497           <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str1
00498         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2
00499     );
00500 
00501     <span class="keyword">static</span> <span class="keywordtype">bool</span> equals
00502     (
00503           <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>    str1
00504         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>    str2
00505     );
00506 
00533     <span class="keyword">static</span> <span class="keywordtype">bool</span> regionMatches
00534     (
00535         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    str1
00536         , <span class="keyword">const</span> <span class="keywordtype">int</span>             offset1
00537         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2
00538         , <span class="keyword">const</span> <span class="keywordtype">int</span>             offset2
00539         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    charCount
00540     );
00541 
00569     <span class="keyword">static</span> <span class="keywordtype">bool</span> regionIMatches
00570     (
00571         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    str1
00572         , <span class="keyword">const</span> <span class="keywordtype">int</span>             offset1
00573         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2
00574         , <span class="keyword">const</span> <span class="keywordtype">int</span>             offset2
00575         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    charCount
00576     );
00578 
00591     <span class="keyword">static</span> <span class="keywordtype">void</span> copyString
00592     (
00593                 <span class="keywordtype">char</span>* <span class="keyword">const</span>     target
00594         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>     src
00595     );
00596 
00607     <span class="keyword">static</span> <span class="keywordtype">void</span> copyString
00608     (
00609                 XMLCh* <span class="keyword">const</span>    target
00610         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    src
00611     );
00612 
00625     <span class="keyword">static</span> <span class="keywordtype">bool</span> copyNString
00626     (
00627                 XMLCh* <span class="keyword">const</span>    target
00628         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    src
00629         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
00630     );
00632 
00642     <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hash
00643     (
00644         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     toHash
00645         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    hashModulus
00646         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
00647     );
00648 
00656     <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hash
00657     (
00658         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toHash
00659         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    hashModulus
00660         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
00661     );
00662 
00672     <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hashN
00673     (
00674         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toHash
00675         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    numChars
00676         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    hashModulus
00677         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager = XMLPlatformUtils::fgMemoryManager
00678     );
00679 
00681 
00692     <span class="keyword">static</span> <span class="keywordtype">int</span> indexOf(<span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> toSearch, <span class="keyword">const</span> <span class="keywordtype">char</span> ch);
00693 
00702     <span class="keyword">static</span> <span class="keywordtype">int</span> indexOf(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toSearch, <span class="keyword">const</span> XMLCh ch);
00703 
00715     <span class="keyword">static</span> <span class="keywordtype">int</span> indexOf
00716     (
00717         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     toSearch
00718         , <span class="keyword">const</span> <span class="keywordtype">char</span>            chToFind
00719         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    fromIndex
00720         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
00721     );
00722 
00734     <span class="keyword">static</span> <span class="keywordtype">int</span> indexOf
00735     (
00736         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toSearch
00737         , <span class="keyword">const</span> XMLCh           chToFind
00738         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    fromIndex
00739         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
00740     );
00741 
00750     <span class="keyword">static</span> <span class="keywordtype">int</span> lastIndexOf(<span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> toSearch, <span class="keyword">const</span> <span class="keywordtype">char</span> ch);
00751 
00760     <span class="keyword">static</span> <span class="keywordtype">int</span> lastIndexOf(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toSearch, <span class="keyword">const</span> XMLCh ch);
00761 
00771     <span class="keyword">static</span> <span class="keywordtype">int</span> lastIndexOf
00772     (
00773         <span class="keyword">const</span> XMLCh ch
00774         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toSearch
00775         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> toSearchLen
00776     );
00777 
00789     <span class="keyword">static</span> <span class="keywordtype">int</span> lastIndexOf
00790     (
00791         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     toSearch
00792         , <span class="keyword">const</span> <span class="keywordtype">char</span>            chToFind
00793         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    fromIndex
00794         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
00795     );
00796 
00808     <span class="keyword">static</span> <span class="keywordtype">int</span> lastIndexOf
00809     (
00810         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toSearch
00811         , <span class="keyword">const</span> XMLCh           ch
00812         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    fromIndex
00813         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
00814     );
00816 
00824     <span class="keyword">static</span> <span class="keywordtype">void</span> moveChars
00825     (
00826                 XMLCh* <span class="keyword">const</span>    targetStr
00827         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    srcStr
00828         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    count
00829     );
00830 
00832 
00844     <span class="keyword">static</span> <span class="keywordtype">void</span> subString
00845     (
00846                 <span class="keywordtype">char</span>* <span class="keyword">const</span>    targetStr
00847         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>    srcStr
00848         , <span class="keyword">const</span> <span class="keywordtype">int</span>            startIndex
00849         , <span class="keyword">const</span> <span class="keywordtype">int</span>            endIndex
00850         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager = XMLPlatformUtils::fgMemoryManager
00851     );
00852 
00862     <span class="keyword">static</span> <span class="keywordtype">void</span> subString
00863     (
00864                 XMLCh* <span class="keyword">const</span>    targetStr
00865         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    srcStr
00866         , <span class="keyword">const</span> <span class="keywordtype">int</span>             startIndex
00867         , <span class="keyword">const</span> <span class="keywordtype">int</span>             endIndex
00868         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
00869     );
00870 
00881     <span class="keyword">static</span> <span class="keywordtype">void</span> subString
00882     (
00883                 XMLCh* <span class="keyword">const</span>    targetStr
00884         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    srcStr
00885         , <span class="keyword">const</span> <span class="keywordtype">int</span>             startIndex
00886         , <span class="keyword">const</span> <span class="keywordtype">int</span>             endIndex
00887         , <span class="keyword">const</span> <span class="keywordtype">int</span>             srcStrLength
00888         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
00889     );
00890 
00892 
00904     <span class="keyword">static</span> <span class="keywordtype">char</span>* replicate(<span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> toRep);
00905 
00914     <span class="keyword">static</span> <span class="keywordtype">char</span>* replicate(<span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> toRep,
00915                            <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager);
00916 
00926     <span class="keyword">static</span> XMLCh* replicate(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toRep);
00927 
00936     <span class="keyword">static</span> XMLCh* replicate(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toRep,
00937                             <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager);
00938 
00940 
00949     <span class="keyword">static</span> <span class="keywordtype">bool</span> startsWith
00950     (
00951         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     toTest
00952         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>     prefix
00953     );
00954 
00961     <span class="keyword">static</span> <span class="keywordtype">bool</span> startsWith
00962     (
00963         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toTest
00964         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    prefix
00965     );
00966 
00975     <span class="keyword">static</span> <span class="keywordtype">bool</span> startsWithI
00976     (
00977         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     toTest
00978         , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>     prefix
00979     );
00980 
00990     <span class="keyword">static</span> <span class="keywordtype">bool</span> startsWithI
00991     (
00992         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toTest
00993         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    prefix
00994     );
00995 
01002     <span class="keyword">static</span> <span class="keywordtype">bool</span> endsWith
01003     (
01004         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toTest
01005         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    suffix
01006     );
01007 
01008 
01017     <span class="keyword">static</span> <span class="keyword">const</span> XMLCh* findAny
01018     (
01019         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toSearch
01020         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    searchList
01021     );
01022 
01031     <span class="keyword">static</span> XMLCh* findAny
01032     (
01033                 XMLCh* <span class="keyword">const</span>    toSearch
01034         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    searchList
01035     );
01036 
01043     <span class="keyword">static</span> <span class="keywordtype">int</span> patternMatch
01044     (
01045           <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    toSearch
01046         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    pattern
01047     );
01048 
01053     <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stringLen(<span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> src);
01054 
01059     <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stringLen(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> src);
01060 
01068     <span class="keyword">static</span> <span class="keywordtype">bool</span> isValidNOTATION(<span class="keyword">const</span> XMLCh*         <span class="keyword">const</span> name
01069                               ,       <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager = XMLPlatformUtils::fgMemoryManager);
01070 
01078     <span class="keyword">static</span> <span class="keywordtype">bool</span> isValidNCName(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> name);
01079 
01087     <span class="keyword">static</span> <span class="keywordtype">bool</span> isValidName(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> name);
01088 
01094     <span class="keyword">static</span> <span class="keywordtype">bool</span> isValidEncName(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> name);
01095 
01103     <span class="keyword">static</span> <span class="keywordtype">bool</span> isValidQName(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> name);
01104 
01111     <span class="keyword">static</span> <span class="keywordtype">bool</span> isAlpha(XMLCh <span class="keyword">const</span> theChar);
01112 
01118     <span class="keyword">static</span> <span class="keywordtype">bool</span> isDigit(XMLCh <span class="keyword">const</span> theChar);
01119 
01125     <span class="keyword">static</span> <span class="keywordtype">bool</span> isAlphaNum(XMLCh <span class="keyword">const</span> theChar);
01126 
01132     <span class="keyword">static</span> <span class="keywordtype">bool</span> isHex(XMLCh <span class="keyword">const</span> theChar);
01133 
01141     <span class="keyword">static</span> <span class="keywordtype">bool</span> isAllWhiteSpace(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toCheck);
01142 
01148     <span class="keyword">static</span> <span class="keywordtype">bool</span> isInList(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toFind, <span class="keyword">const</span> XMLCh* <span class="keyword">const</span> enumList);
01149 
01151 
01154 
01166     <span class="keyword">static</span> <span class="keywordtype">void</span> binToText
01167     (
01168         <span class="keyword">const</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    toFormat
01169         ,       <span class="keywordtype">char</span>* <span class="keyword">const</span>     toFill
01170         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01171         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    radix
01172         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01173     );
01174 
01186     <span class="keyword">static</span> <span class="keywordtype">void</span> binToText
01187     (
01188         <span class="keyword">const</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    toFormat
01189         ,       XMLCh* <span class="keyword">const</span>    toFill
01190         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01191         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    radix
01192         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01193     );
01194 
01206     <span class="keyword">static</span> <span class="keywordtype">void</span> binToText
01207     (
01208         <span class="keyword">const</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   toFormat
01209         ,       <span class="keywordtype">char</span>* <span class="keyword">const</span>     toFill
01210         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01211         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    radix
01212         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01213     );
01214 
01226     <span class="keyword">static</span> <span class="keywordtype">void</span> binToText
01227     (
01228         <span class="keyword">const</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   toFormat
01229         ,       XMLCh* <span class="keyword">const</span>    toFill
01230         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01231         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    radix
01232         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01233     );
01234 
01246     <span class="keyword">static</span> <span class="keywordtype">void</span> binToText
01247     (
01248         <span class="keyword">const</span>   <span class="keywordtype">long</span>            toFormat
01249         ,       <span class="keywordtype">char</span>* <span class="keyword">const</span>     toFill
01250         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01251         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    radix
01252         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01253     );
01254 
01266     <span class="keyword">static</span> <span class="keywordtype">void</span> binToText
01267     (
01268         <span class="keyword">const</span>   <span class="keywordtype">long</span>            toFormat
01269         ,       XMLCh* <span class="keyword">const</span>    toFill
01270         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01271         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    radix
01272         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01273     );
01274 
01286     <span class="keyword">static</span> <span class="keywordtype">void</span> binToText
01287     (
01288         <span class="keyword">const</span>   <span class="keywordtype">int</span>             toFormat
01289         ,       <span class="keywordtype">char</span>* <span class="keyword">const</span>     toFill
01290         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01291         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    radix
01292         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01293     );
01294 
01306     <span class="keyword">static</span> <span class="keywordtype">void</span> binToText
01307     (
01308         <span class="keyword">const</span>   <span class="keywordtype">int</span>             toFormat
01309         ,       XMLCh* <span class="keyword">const</span>    toFill
01310         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01311         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    radix
01312         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01313     );
01314 
01326     <span class="keyword">static</span> <span class="keywordtype">bool</span> textToBin
01327     (
01328         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toConvert
01329         ,       <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&amp;   toFill
01330         ,       <a class="code" href="classMemoryManager.html">MemoryManager</a>*  <span class="keyword">const</span> manager = XMLPlatformUtils::fgMemoryManager
01331     );
01332 
01346     <span class="keyword">static</span> <span class="keywordtype">int</span> parseInt
01347     (
01348         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toConvert
01349       , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>    manager = XMLPlatformUtils::fgMemoryManager
01350     );
01351 
01357     <span class="keyword">static</span> <span class="keywordtype">void</span> cut
01358     (
01359                 XMLCh* <span class="keyword">const</span>    toCutFrom
01360         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    count
01361     );
01362 
01373     <span class="keyword">static</span> <span class="keywordtype">char</span>* transcode
01374     (
01375         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toTranscode
01376     );
01377     <span class="keyword">static</span> <span class="keywordtype">char</span>* transcode
01378     (
01379         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>         toTranscode
01380         ,       <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager
01381     );
01382 
01398     <span class="keyword">static</span> <span class="keywordtype">bool</span> transcode
01399     (
01400         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toTranscode
01401         ,       <span class="keywordtype">char</span>* <span class="keyword">const</span>     toFill
01402         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01403         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01404     );
01405 
01416     <span class="keyword">static</span> XMLCh* transcode
01417     (
01418         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     toTranscode
01419     );
01420     <span class="keyword">static</span> XMLCh* transcode
01421     (
01422         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>          toTranscode
01423         ,       <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager
01424     );
01425 
01436     <span class="keyword">static</span> <span class="keywordtype">bool</span> transcode
01437     (
01438         <span class="keyword">const</span>   <span class="keywordtype">char</span>* <span class="keyword">const</span>     toTranscode
01439         ,       XMLCh* <span class="keyword">const</span>    toFill
01440         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01441         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01442     );
01443 
01449     <span class="keyword">static</span> <span class="keywordtype">void</span> trim(<span class="keywordtype">char</span>* <span class="keyword">const</span> toTrim);
01450 
01456     <span class="keyword">static</span> <span class="keywordtype">void</span> trim(XMLCh* <span class="keyword">const</span> toTrim);
01457 
01465     <span class="keyword">static</span> BaseRefVectorOf&lt;XMLCh&gt;* tokenizeString(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> tokenizeSrc
01466                                         , <a class="code" href="classMemoryManager.html">MemoryManager</a>*       <span class="keyword">const</span> manager = XMLPlatformUtils::fgMemoryManager);
01467 
01469 
01480     <span class="keyword">static</span> XMLCh* makeUName
01481     (
01482         <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    pszURI
01483         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    pszName      
01484     );
01485 
01502     <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> replaceTokens
01503     (
01504                 XMLCh* <span class="keyword">const</span>    errText
01505         , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    maxChars
01506         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    text1
01507         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    text2
01508         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    text3
01509         , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    text4
01510         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager
01511     );
01512 
01517     <span class="keyword">static</span> <span class="keywordtype">void</span> upperCase(XMLCh* <span class="keyword">const</span> toUpperCase);
01518 
01524     <span class="keyword">static</span> <span class="keywordtype">void</span> upperCaseASCII(XMLCh* <span class="keyword">const</span> toUpperCase);
01525 
01530     <span class="keyword">static</span> <span class="keywordtype">void</span> lowerCase(XMLCh* <span class="keyword">const</span> toLowerCase);
01531 
01537     <span class="keyword">static</span> <span class="keywordtype">void</span> lowerCaseASCII(XMLCh* <span class="keyword">const</span> toLowerCase);
01538 
01542     <span class="keyword">static</span> <span class="keywordtype">bool</span> isWSReplaced(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toCheck);
01543 
01547     <span class="keyword">static</span> <span class="keywordtype">bool</span> isWSCollapsed(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toCheck);
01548 
01554     <span class="keyword">static</span> <span class="keywordtype">void</span> replaceWS(XMLCh* <span class="keyword">const</span> toConvert
01555         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager);
01556 
01562     <span class="keyword">static</span> <span class="keywordtype">void</span> collapseWS(XMLCh* <span class="keyword">const</span> toConvert
01563         , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>  manager = XMLPlatformUtils::fgMemoryManager);
01564 
01570     <span class="keyword">static</span> <span class="keywordtype">void</span> removeWS(XMLCh* <span class="keyword">const</span> toConvert
01571     , <a class="code" href="classMemoryManager.html">MemoryManager</a>*       <span class="keyword">const</span> manager = XMLPlatformUtils::fgMemoryManager);
01572 
01573 
01579     <span class="keyword">static</span> <span class="keywordtype">void</span> removeChar(<span class="keyword">const</span> XMLCh*     <span class="keyword">const</span> srcString
01580                          , <span class="keyword">const</span> XMLCh&amp;           toRemove
01581                          ,       XMLBuffer&amp;       dstBuffer);
01582 
01590     <span class="keyword">static</span> <span class="keywordtype">void</span> fixURI(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> str, XMLCh* <span class="keyword">const</span> target);
01591 
01593 
01601     <span class="keyword">static</span> <span class="keywordtype">void</span> release(<span class="keywordtype">char</span>** buf);
01602 
01609     <span class="keyword">static</span> <span class="keywordtype">void</span> release(XMLCh** buf);
01610 
01617     <span class="keyword">static</span> <span class="keywordtype">void</span> release(<a class="code" href="XercesDefs_8hpp.html#a17">XMLByte</a>** buf);
01618 
01627     <span class="keyword">static</span> <span class="keywordtype">void</span> release
01628     (
01629         <span class="keywordtype">void</span>**  buf
01630         ,       <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager
01631     );
01632 
01634 
01635 
01636 <span class="keyword">private</span> :
01637 
01641     XMLString();
01643     ~XMLString();
01645 
01646 
01650     <span class="keyword">static</span> <span class="keywordtype">void</span> initString(<a class="code" href="classXMLLCPTranscoder.html">XMLLCPTranscoder</a>* <span class="keyword">const</span> defToUse,
01651                            <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager);
01652     <span class="keyword">static</span> <span class="keywordtype">void</span> termString();
01654 
01659     <span class="keyword">static</span> <span class="keywordtype">bool</span> validateRegion(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> str1, <span class="keyword">const</span> <span class="keywordtype">int</span> offset1,
01660                         <span class="keyword">const</span> XMLCh* <span class="keyword">const</span> str2, <span class="keyword">const</span> <span class="keywordtype">int</span> offset2,
01661                         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> charCount);
01662 
01663     <span class="keyword">static</span> <a class="code" href="classMemoryManager.html">MemoryManager</a>* fgMemoryManager;
01664 
<a name="l01665"></a><a class="code" href="classXMLString.html#n0">01665</a>     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classXMLPlatformUtils.html">XMLPlatformUtils</a>;
01666 };
01667 
01668 
01669 <span class="comment">// ---------------------------------------------------------------------------</span>
01670 <span class="comment">//  Inline some methods that are either just passthroughs to other string</span>
01671 <span class="comment">//  methods, or which are key for performance.</span>
01672 <span class="comment">// ---------------------------------------------------------------------------</span>
<a name="l01673"></a><a class="code" href="classXMLString.html#z1007_0">01673</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classXMLString.html#z1007_0">XMLString::moveChars</a>(       XMLCh* <span class="keyword">const</span> targetStr
01674                                 , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span> srcStr
01675                                 , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count)
01676 {
01677     memcpy(targetStr, srcStr, count * <span class="keyword">sizeof</span>(XMLCh));
01678 }
01679 
<a name="l01680"></a><a class="code" href="classXMLString.html#z1013_9">01680</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classXMLString.html#z1013_8">XMLString::stringLen</a>(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> src)
01681 {
01682     <span class="keywordflow">if</span> (src == 0 || *src == 0)
01683     {
01684         <span class="keywordflow">return</span> 0;
01685    }
01686     <span class="keywordflow">else</span>
01687    {
01688         <span class="keyword">const</span> XMLCh* pszTmp = src + 1;
01689 
01690         <span class="keywordflow">while</span> (*pszTmp)
01691             ++pszTmp;
01692 
01693         <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)(pszTmp - src);
01694     }
01695 }
01696 
<a name="l01697"></a><a class="code" href="classXMLString.html#z1011_3">01697</a> <span class="keyword">inline</span> XMLCh* <a class="code" href="classXMLString.html#z1011_0">XMLString::replicate</a>(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toRep,
01698                                    <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span> manager)
01699 {
01700     <span class="comment">// If a null string, return a null string!</span>
01701     XMLCh* ret = 0;
01702     <span class="keywordflow">if</span> (toRep)
01703     {
01704         <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = <a class="code" href="classXMLString.html#z1013_8">stringLen</a>(toRep);
01705         ret = (XMLCh*) manager-&gt;allocate((len+1) * <span class="keyword">sizeof</span>(XMLCh)); <span class="comment">//new XMLCh[len + 1];</span>
01706         memcpy(ret, toRep, (len + 1) * <span class="keyword">sizeof</span>(XMLCh));
01707     }
01708     <span class="keywordflow">return</span> ret;
01709 }
01710 
<a name="l01711"></a><a class="code" href="classXMLString.html#z1013_1">01711</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classXMLString.html#z1013_0">XMLString::startsWith</a>(  <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toTest
01712                                     , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    prefix)
01713 {
01714     <span class="keywordflow">return</span> (<a class="code" href="classXMLString.html#z999_3">compareNString</a>(toTest, prefix, <a class="code" href="classXMLString.html#z1013_8">stringLen</a>(prefix)) == 0);
01715 }
01716 
<a name="l01717"></a><a class="code" href="classXMLString.html#z1013_3">01717</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classXMLString.html#z1013_2">XMLString::startsWithI</a>( <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    toTest
01718                                     , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    prefix)
01719 {
01720     <span class="keywordflow">return</span> (<a class="code" href="classXMLString.html#z999_5">compareNIString</a>(toTest, prefix, <a class="code" href="classXMLString.html#z1013_8">stringLen</a>(prefix)) == 0);
01721 }
01722 
<a name="l01723"></a><a class="code" href="classXMLString.html#z1013_4">01723</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classXMLString.html#z1013_4">XMLString::endsWith</a>(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toTest,
01724                                 <span class="keyword">const</span> XMLCh* <span class="keyword">const</span> suffix)
01725 {
01726 
01727     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> suffixLen = <a class="code" href="classXMLString.html#z1013_8">XMLString::stringLen</a>(suffix);
01728 
01729     <span class="keywordflow">return</span> <a class="code" href="classXMLString.html#z999_11">regionMatches</a>(toTest, <a class="code" href="classXMLString.html#z1013_8">XMLString::stringLen</a>(toTest) - suffixLen,
01730                          suffix, 0, suffixLen);
01731 }
01732 
01733 <span class="keyword">inline</span> <span class="keywordtype">bool</span> XMLString::validateRegion(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> str1,
01734                                       <span class="keyword">const</span> <span class="keywordtype">int</span> offset1,
01735                                       <span class="keyword">const</span> XMLCh* <span class="keyword">const</span> str2,
01736                                       <span class="keyword">const</span> <span class="keywordtype">int</span> offset2,
01737                                       <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> charCount)
01738 {
01739 
01740     <span class="keywordflow">if</span> (offset1 &lt; 0 || offset2 &lt; 0 ||
01741         (offset1 + charCount) &gt; XMLString::stringLen(str1) ||
01742         (offset2 + charCount) &gt; XMLString::stringLen(str2) )
01743         <span class="keywordflow">return</span> <span class="keyword">false</span>;
01744 
01745     <span class="keywordflow">return</span> <span class="keyword">true</span>;
01746 }
01747 
<a name="l01748"></a><a class="code" href="classXMLString.html#z999_9">01748</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classXMLString.html#z999_9">XMLString::equals</a>(   <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str1
01749                                , <span class="keyword">const</span> XMLCh* <span class="keyword">const</span>    str2)
01750 {
01751     <span class="keyword">const</span> XMLCh* psz1 = str1;
01752     <span class="keyword">const</span> XMLCh* psz2 = str2;
01753 
01754     <span class="keywordflow">if</span> (psz1 == 0 || psz2 == 0) {
01755         <span class="keywordflow">if</span> ((psz1 != 0 &amp;&amp; *psz1) || (psz2 != 0 &amp;&amp; *psz2))
01756             <span class="keywordflow">return</span> <span class="keyword">false</span>;
01757         <span class="keywordflow">else</span>
01758             <span class="keywordflow">return</span> <span class="keyword">true</span>;
01759     }
01760 
01761     <span class="keywordflow">while</span> (*psz1 == *psz2)
01762     {
01763         <span class="comment">// If either has ended, then they both ended, so equal</span>
01764         <span class="keywordflow">if</span> (!*psz1)
01765             <span class="keywordflow">return</span> <span class="keyword">true</span>;
01766 
01767         <span class="comment">// Move upwards for the next round</span>
01768         psz1++;
01769         psz2++;
01770     }
01771     <span class="keywordflow">return</span> <span class="keyword">false</span>;
01772 }
01773 
<a name="l01774"></a><a class="code" href="classXMLString.html#z999_10">01774</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classXMLString.html#z999_9">XMLString::equals</a>(   <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>    str1
01775                                , <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span>    str2)
01776 {
01777     <span class="keyword">const</span> <span class="keywordtype">char</span>* psz1 = str1;
01778     <span class="keyword">const</span> <span class="keywordtype">char</span>* psz2 = str2;
01779 
01780     <span class="keywordflow">if</span> (psz1 == 0 || psz2 == 0) {
01781         <span class="keywordflow">if</span> ((psz1 != 0 &amp;&amp; *psz1) || (psz2 != 0 &amp;&amp; *psz2))
01782             <span class="keywordflow">return</span> <span class="keyword">false</span>;
01783         <span class="keywordflow">else</span>
01784             <span class="keywordflow">return</span> <span class="keyword">true</span>;
01785     }
01786 
01787     <span class="keywordflow">while</span> (*psz1 == *psz2)
01788     {
01789         <span class="comment">// If either has ended, then they both ended, so equal</span>
01790         <span class="keywordflow">if</span> (!*psz1)
01791             <span class="keywordflow">return</span> <span class="keyword">true</span>;
01792 
01793         <span class="comment">// Move upwards for the next round</span>
01794         psz1++;
01795         psz2++;
01796     }
01797     <span class="keywordflow">return</span> <span class="keyword">false</span>;
01798 }
01799 
<a name="l01800"></a><a class="code" href="classXMLString.html#z1005_5">01800</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classXMLString.html#z1005_4">XMLString::lastIndexOf</a>(<span class="keyword">const</span> XMLCh* <span class="keyword">const</span> toSearch, <span class="keyword">const</span> XMLCh ch)
01801 {
01802     <span class="keywordflow">return</span> <a class="code" href="classXMLString.html#z1005_4">XMLString::lastIndexOf</a>(ch, toSearch, <a class="code" href="classXMLString.html#z1013_8">stringLen</a>(toSearch));
01803 }
01804 
<a name="l01805"></a><a class="code" href="classXMLString.html#z1003_1">01805</a> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classXMLString.html#z1003_0">XMLString::hash</a>(   <span class="keyword">const</span>   XMLCh* <span class="keyword">const</span>    tohash
01806                                 , <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    hashModulus
01807                                 , <a class="code" href="classMemoryManager.html">MemoryManager</a>* <span class="keyword">const</span>)
01808 {  
01809     assert(hashModulus);
01810 
01811     <span class="keywordflow">if</span> (tohash == 0 || *tohash == 0)
01812         <span class="keywordflow">return</span> 0;
01813 
01814     <span class="keyword">const</span> XMLCh* curCh = tohash;
01815     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hashVal = (<span class="keywordtype">unsigned</span> int)(*curCh);
01816     curCh++;
01817 
01818     <span class="keywordflow">while</span> (*curCh)
01819     {
01820         hashVal = (hashVal * 38) + (hashVal &gt;&gt; 24) + (<span class="keywordtype">unsigned</span> int)(*curCh);
01821         curCh++;
01822     }
01823 
01824     <span class="comment">// Divide by modulus</span>
01825     <span class="keywordflow">return</span> hashVal % hashModulus;
01826 }
01827 
01828 <a class="code" href="XercesDefs_8hpp.html#a4">XERCES_CPP_NAMESPACE_END</a>
01829 
01830 <span class="preprocessor">#endif</span>
</pre></div>    </FONT></TD></TR></TABLE><BR>
</TD></TR></TABLE></TD></TR></TABLE><BR><TABLE border="0" cellpadding="0" cellspacing="0" width="620"><TR><TD bgcolor="#0086b2"><IMG height="1" src="images/dot.gif" width="1" alt=""></TD></TR><TR><TD align="center"><FONT color="#0086b2" size="-1"><I>
              Copyright &copy; 1994-2004 The Apache Software Foundation.
              All Rights Reserved.
            </I></FONT></TD></TR></TABLE></BODY></HTML>