📄 xmlstring.hpp
字号:
/* * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xerces" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache\@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation, and was * originally based on software copyright (c) 1999, International * Business Machines, Inc., http://www.ibm.com . For more information * on the Apache Software Foundation, please see * <http://www.apache.org/>. *//* * $Log: XMLString.hpp,v $ * Revision 1.23 2003/12/24 15:24:13 cargilld * More updates to memory management so that the static memory manager. * * Revision 1.22 2003/12/17 20:00:49 cargilld * Update for memory management so that the static memory manager (one * used to call Initialize) is only for static data. * * Revision 1.21 2003/12/17 00:18:35 cargilld * Update to memory management so that the static memory manager (one used to call Initialize) is only for static data. * * Revision 1.20 2003/10/02 11:07:26 gareth * 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. * * Revision 1.19 2003/10/01 00:22:20 knoaman * Add a lastIndexOf method that takes the string length as one of the params. * * Revision 1.18 2003/08/25 20:39:47 neilg * fix XMLString::findAny(...) docs so that they match what the method actually does (and has done since time immemorial) * * Revision 1.17 2003/05/18 14:02:05 knoaman * Memory manager implementation: pass per instance manager. * * Revision 1.16 2003/05/15 19:07:46 knoaman * Partial implementation of the configurable memory manager. * * Revision 1.15 2003/04/21 20:07:05 knoaman * Performance: use memcpy in moveChars and replicate. * * Revision 1.14 2003/02/25 16:42:31 tng * [Bug 7072] Documentation for XMLString::transcode states invalid return value. * * Revision 1.13 2003/02/05 18:50:56 tng * [Bug 11915] Utility for freeing memory. * * Revision 1.12 2003/01/24 23:16:33 peiyongz * removeWS() added; * * Revision 1.11 2002/12/20 22:10:21 tng * XML 1.1 * * Revision 1.10 2002/12/18 14:17:54 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * * Revision 1.9 2002/12/04 02:32:43 knoaman * #include cleanup. * * Revision 1.8 2002/11/05 17:42:39 peiyongz * equals( const char* const, const char* const) * * Revision 1.7 2002/11/04 15:22:05 tng * C++ Namespace Support. * * Revision 1.6 2002/10/01 19:45:22 tng * Performance in XMLString::equals, only need to check one string for null as they are equal already. * * Revision 1.5 2002/09/24 19:41:21 tng * New inline function equals that is modified from compareString but simply return true or false. * * Revision 1.4 2002/09/23 18:42:18 tng * DOM L3: Support baseURI. Add utility fixURI to transform an absolute path filename to standard URI form. * * Revision 1.3 2002/08/27 19:24:43 peiyongz * Bug#12087: patch from Thomas Ford (tom@decisionsoft.com) * * Revision 1.2 2002/02/20 18:17:02 tng * [Bug 5977] Warnings on generating apiDocs. * * Revision 1.1.1.1 2002/02/01 22:22:16 peiyongz * sane_include * * Revision 1.26 2001/08/10 16:23:06 peiyongz * isHex(), isAlphaNum(), isAllWhiteSpace() and patternMatch() Added * * Revision 1.25 2001/07/06 20:27:57 peiyongz * isValidaQName() * * Revision 1.24 2001/07/04 14:38:20 peiyongz * IDDatatypeValidator: created * DatatypeValidatorFactory: IDDTV enabled * XMLString:isValidName(): to validate Name (XML [4][5]) * * Revision 1.23 2001/06/13 14:07:55 peiyongz * isValidaEncName() to validate an encoding name (EncName) * * Revision 1.22 2001/05/23 15:44:51 tng * Schema: NormalizedString fix. By Pei Yong Zhang. * * Revision 1.21 2001/05/11 13:26:31 tng * Copyright update. * * Revision 1.20 2001/05/09 18:43:30 tng * Add StringDatatypeValidator and BooleanDatatypeValidator. By Pei Yong Zhang. * * Revision 1.19 2001/05/03 20:34:35 tng * Schema: SchemaValidator update * * Revision 1.18 2001/05/03 19:17:35 knoaman * TraverseSchema Part II. * * Revision 1.17 2001/03/21 21:56:13 tng * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar. * * Revision 1.16 2001/03/02 20:52:46 knoaman * Schema: Regular expression - misc. updates for error messages, * and additions of new functions to XMLString class. * * Revision 1.15 2001/01/15 21:26:34 tng * Performance Patches by David Bertoni. * * Details: (see xerces-c-dev mailing Jan 14) * XMLRecognizer.cpp: the internal encoding string XMLUni::fgXMLChEncodingString * was going through this function numerous times. As a result, the top hot-spot * for the parse was _wcsicmp(). The real problem is that the Microsofts wide string * functions are unbelievably slow. For things like encodings, it might be * better to use a special comparison function that only considers a-z and * A-Z as characters with case. This works since the character set for * encodings is limit to printable ASCII characters. * * XMLScanner2.cpp: This also has some case-sensitive vs. insensitive compares. * They are also much faster. The other tweak is to only make a copy of an attribute * string if it needs to be split. And then, the strategy is to try to use a * stack-based buffer, rather than a dynamically-allocated one. * * SAX2XMLReaderImpl.cpp: Again, more case-sensitive vs. insensitive comparisons. * * KVStringPair.cpp & hpp: By storing the size of the allocation, the storage can * likely be re-used many times, cutting down on dynamic memory allocations. * * XMLString.hpp: a more efficient implementation of stringLen(). * * DTDValidator.cpp: another case of using a stack-based buffer when possible * * These patches made a big difference in parse time in some of our test * files, especially the ones are very attribute-heavy. * * Revision 1.14 2000/10/13 22:47:57 andyh * Fix bug (failure to null-terminate result) in XMLString::trim(). * Patch contributed by Nadav Aharoni * * Revision 1.13 2000/04/12 18:42:15 roddey * Improved docs in terms of what 'max chars' means in the method * parameters. * * Revision 1.12 2000/04/06 19:42:51 rahulj * Clarified how big the target buffer should be in the API * documentation. * * Revision 1.11 2000/03/23 01:02:38 roddey * Updates to the XMLURL class to correct a lot of parsing problems * and to add support for the port number. Updated the URL tests * to test some of this new stuff. * * Revision 1.10 2000/03/20 23:00:46 rahulj * Moved the inline definition of stringLen before the first * use. This satisfied the HP CC compiler. * * Revision 1.9 2000/03/02 19:54:49 roddey * This checkin includes many changes done while waiting for the * 1.1.0 code to be finished. I can't list them all here, but a list is * available elsewhere. * * Revision 1.8 2000/02/24 20:05:26 abagchi * Swat for removing Log from API docs * * Revision 1.7 2000/02/16 18:51:52 roddey * Fixed some facts in the docs and reformatted the docs to stay within * a reasonable line width. * * Revision 1.6 2000/02/16 17:07:07 abagchi * Added API docs * * Revision 1.5 2000/02/06 07:48:06 rahulj * Year 2K copyright swat. * * Revision 1.4 2000/01/12 00:16:23 roddey * Changes to deal with multiply nested, relative pathed, entities and to deal * with the new URL class changes. * * Revision 1.3 1999/12/18 00:18:10 roddey * More changes to support the new, completely orthagonal support for * intrinsic encodings. * * Revision 1.2 1999/12/15 19:41:28 roddey * Support for the new transcoder system, where even intrinsic encodings are * done via the same transcoder abstraction as external ones. * * Revision 1.1.1.1 1999/11/09 01:05:52 twl * Initial checkin * * Revision 1.2 1999/11/08 20:45:21 rahul * Swat for adding in Product name and CVS comment log variable. * */#if !defined(XMLSTRING_HPP)#define XMLSTRING_HPP#include <xercesc/util/BaseRefVectorOf.hpp>#include <xercesc/framework/MemoryManager.hpp>#include <string.h>XERCES_CPP_NAMESPACE_BEGINclass XMLLCPTranscoder;/** * Class for representing native character strings and handling common string * operations * * This class is Unicode compliant. This class is designed primarily * for internal use, but due to popular demand, it is being made * publicly available. Users of this class must understand that this * is not an officially supported class. All public methods of this * class are <i>static functions</i>. * */class XMLUTIL_EXPORT XMLString{public: /* Static methods for native character mode string manipulation */ /** @name String concatenation functions */ //@{ /** Concatenates two strings. * * <code>catString</code> appends <code>src</code> to <code>target</code> and * terminates the resulting string with a null character. The initial character * of <code>src</code> overwrites the terminating character of <code>target * </code>. * * No overflow checking is performed when strings are copied or appended. * The behavior of <code>catString</code> is undefined if source and * destination strings overlap. * * @param target Null-terminated destination string * @param src Null-terminated source string */ static void catString ( char* const target , const char* const src ); /** Concatenates two strings. * * <code>catString</code> appends <code>src</code> to <code>target</code> and * terminates the resulting string with a null character. The initial character of * <code>src</code> overwrites the terminating character of <code>target</code>. * No overflow checking is performed when strings are copied or appended. * The behavior of <code>catString</code> is undefined if source and destination * strings overlap. * * @param target Null-terminated destination string * @param src Null-terminated source string */ static void catString ( XMLCh* const target , const XMLCh* const src ); //@} /** @name String comparison functions */ //@{ /** Lexicographically compares lowercase versions of <code>str1</code> and * <code>str2</code> and returns a value indicating their relationship. * @param str1 Null-terminated string to compare * @param str2 Null-terminated string to compare * * @return The return value indicates the relation of <code>str1</code> to * <code>str2</code> as follows * Less than 0 means <code>str1</code> is less than <code>str2</code> * Equal to 0 means <code>str1</code> is identical to <code>str2</code> * Greater than 0 means <code>str1</code> is more than <code>str2</code> */ static int compareIString ( const char* const str1 , const char* const str2 ); /** Lexicographically compares lowercase versions of <code>str1</code> and * <code>str2</code> and returns a value indicating their relationship.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -