<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"> </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 Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a> | <a class="qindex" href="pages.html">Related Pages</a></div> <div class="nav"> <a class="el" href="dir_000000.html">src</a> / <a class="el" href="dir_000001.html">xercesc</a> / <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 & 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 <xercesc/util/BaseRefVectorOf.hpp></span> 00250 <span class="preprocessor">#include <xercesc/framework/XMLBuffer.hpp></span> 00251 <span class="preprocessor">#include <<a class="code" href="MemoryManager_8hpp.html">xercesc/framework/MemoryManager.hpp</a>></span> 00252 <span class="preprocessor">#include <string.h></span> 00253 <span class="preprocessor">#include <assert.h></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>& 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<XMLCh>* 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& toRemove 01581 , XMLBuffer& 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->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 < 0 || offset2 < 0 || 01741 (offset1 + charCount) > XMLString::stringLen(str1) || 01742 (offset2 + charCount) > 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 && *psz1) || (psz2 != 0 && *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 && *psz1) || (psz2 != 0 && *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 >> 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 © 1994-2004 The Apache Software Foundation. All Rights Reserved. </I></FONT></TD></TR></TABLE></BODY></HTML>