You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by kn...@apache.org on 2001/06/11 17:15:48 UTC
cvs commit: xml-xerces/c/src/util XMLStringTokenizer.cpp XMLStringTokenizer.hpp Makefile.in
knoaman 01/06/11 08:15:48
Modified: c/src/util Makefile.in
Added: c/src/util XMLStringTokenizer.cpp XMLStringTokenizer.hpp
Log:
StringTokenizer renamed to XMLStringTokenizer.
Revision Changes Path
1.38 +5 -2 xml-xerces/c/src/util/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/util/Makefile.in,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- Makefile.in 2001/06/06 13:13:58 1.37
+++ Makefile.in 2001/06/11 15:15:45 1.38
@@ -55,6 +55,9 @@
#
#
# $Log: Makefile.in,v $
+# Revision 1.38 2001/06/11 15:15:45 knoaman
+# StringTokenizer renamed to XMLStringTokenizer.
+#
# Revision 1.37 2001/06/06 13:13:58 tng
# Fix regression where TRANSCODERMODULE is not assigned if TRANSCODE == NATIVE.
#
@@ -309,7 +312,7 @@
RefVectorOf.hpp \
RuntimeException.hpp \
StringPool.hpp \
- StringTokenizer.hpp \
+ XMLStringTokenizer.hpp \
TransENameMap.hpp \
TransService.hpp \
TranscodingException.hpp \
@@ -378,7 +381,7 @@
PlatformUtils.$(TO) \
QName.$(TO) \
StringPool.$(TO) \
- StringTokenizer.$(TO) \
+ XMLStringTokenizer.$(TO) \
XMLURL.$(TO) \
TransService.$(TO) \
XML256TableTranscoder.$(TO) \
1.1 xml-xerces/c/src/util/XMLStringTokenizer.cpp
Index: XMLStringTokenizer.cpp
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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) 2001, International
* Business Machines, Inc., http://www.ibm.com . For more information
* on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/*
* $Log: XMLStringTokenizer.cpp,v $
* Revision 1.1 2001/06/11 15:15:46 knoaman
* StringTokenizer renamed to XMLStringTokenizer.
*
*/
// ---------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------
#include <util/XMLStringTokenizer.hpp>
#include <util/XMLUniDefs.hpp>
// ---------------------------------------------------------------------------
// XMLStringTokenizer: Local const data
// ---------------------------------------------------------------------------
const XMLCh fgDelimeters[] =
{
chSpace, chHTab, chCR, chLF, chNull
};
// ---------------------------------------------------------------------------
// XMLStringTokenizer: Constructors and Destructor
// ---------------------------------------------------------------------------
XMLStringTokenizer::XMLStringTokenizer(const XMLCh* const srcStr)
: fOffset(0)
, fStringLen(XMLString::stringLen(srcStr))
, fString(XMLString::replicate(srcStr))
, fTokens(0)
{
try {
fDelimeters = XMLString::replicate(fgDelimeters);
if (fStringLen > 0) {
fTokens = new RefVectorOf<XMLCh>(4, true);
}
}
catch(...) {
cleanUp();
}
}
XMLStringTokenizer::XMLStringTokenizer(const XMLCh* const srcStr,
const XMLCh* const delim)
: fOffset(0)
, fStringLen(XMLString::stringLen(srcStr))
, fString(XMLString::replicate(srcStr))
, fTokens(0)
{
try {
fDelimeters = XMLString::replicate(delim);
if (fStringLen > 0) {
fTokens = new RefVectorOf<XMLCh>(4, true);
}
}
catch(...) {
cleanUp();
}
}
XMLStringTokenizer::~XMLStringTokenizer()
{
cleanUp();
}
// ---------------------------------------------------------------------------
// XMLStringTokenizer: Management methods
// ---------------------------------------------------------------------------
XMLCh* XMLStringTokenizer::nextToken() {
if (fOffset >= fStringLen) {
return 0;
}
bool tokFound = false;
int startIndex = fOffset;
int endIndex = fOffset;
for (; endIndex < fStringLen; endIndex++) {
if (isDelimeter(fString[endIndex])) {
if (tokFound) {
break;
}
startIndex++;
continue;
}
tokFound = true;
}
fOffset = endIndex;
if (tokFound) {
XMLCh* tokStr = new XMLCh[(endIndex - startIndex) + 1];
XMLString::subString(tokStr, fString, startIndex, endIndex);
fTokens->addElement(tokStr);
return tokStr;
}
return 0;
}
bool XMLStringTokenizer::hasMoreTokens() {
if (countTokens() > 0)
return true;
return false;
}
/**
* End of file XMLStringTokenizer.cpp
*/
1.1 xml-xerces/c/src/util/XMLStringTokenizer.hpp
Index: XMLStringTokenizer.hpp
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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) 2001, International
* Business Machines, Inc., http://www.ibm.com . For more information
* on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/*
* $Id: XMLStringTokenizer.hpp,v 1.1 2001/06/11 15:15:46 knoaman Exp $
*/
#if !defined(XMLSTRINGTOKENIZER_HPP)
#define XMLSTRINGTOKENIZER_HPP
#include <util/RefVectorOf.hpp>
#include <util/XMLString.hpp>
/**
* The string tokenizer class breaks a string into tokens.
*
* The XMLStringTokenizer methods do not distinguish among identifiers,
* numbers, and quoted strings, nor do they recognize and skip comments
*
* A XMLStringTokenizer object internally maintains a current position within
* the string to be tokenized. Some operations advance this current position
* past the characters processed.
*/
class XMLUTIL_EXPORT XMLStringTokenizer
{
public:
// -----------------------------------------------------------------------
// Public Constructors
// -----------------------------------------------------------------------
/** @name Constructors */
//@{
/**
* Constructs a string tokenizer for the specified string. The tokenizer
* uses the default delimiter set, which is "\t\n\r\f": the space
* character, the tab character, the newline character, the
* carriage-return character, and the form-feed character. Delimiter
* characters themselves will not be treated as tokens.
*
* @param srcStr The string to be parsed.
*
*/
XMLStringTokenizer(const XMLCh* const srcStr);
/**
* Constructs a string tokenizer for the specified string. The characters
* in the delim argument are the delimiters for separating tokens.
* Delimiter characters themselves will not be treated as tokens.
*
* @param srcStr The string to be parsed.
* @param delim The set of delimiters.
*/
XMLStringTokenizer(const XMLCh* const srcStr, const XMLCh* const delim);
//@}
// -----------------------------------------------------------------------
// Public Destructor
// -----------------------------------------------------------------------
/** @name Destructor. */
//@{
~XMLStringTokenizer();
//@}
// -----------------------------------------------------------------------
// Management methods
// -----------------------------------------------------------------------
/** @name Management Function */
//@{
/**
* Tests if there are more tokens available from this tokenizer's string.
*
* Returns true if and only if there is at least one token in the string
* after the current position; false otherwise.
*/
bool hasMoreTokens();
/**
* Calculates the number of times that this tokenizer's nextToken method
* can be called to return a valid token. The current position is not
* advanced.
*
* Returns the number of tokens remaining in the string using the current
* delimiter set.
*/
int countTokens();
/**
* Returns the next token from this string tokenizer.
*
* Function allocated, function managed (fafm). The calling function
* does not need to worry about deleting the returned pointer.
*/
XMLCh* nextToken();
//@}
private:
// -----------------------------------------------------------------------
// CleanUp methods
// -----------------------------------------------------------------------
void cleanUp();
// -----------------------------------------------------------------------
// Helper methods
// -----------------------------------------------------------------------
bool isDelimeter(const XMLCh ch);
// -----------------------------------------------------------------------
// Private data members
//
// fOffset
// The current position in the parsed string.
//
// fStringLen
// The length of the string parsed (for convenience).
//
// fString
// The string to be parsed
//
// fDelimeters
// A set of delimeter characters
//
// fTokens
// A vector of the token strings
// -----------------------------------------------------------------------
int fOffset;
int fStringLen;
XMLCh* fString;
XMLCh* fDelimeters;
RefVectorOf<XMLCh>* fTokens;
};
// ---------------------------------------------------------------------------
// XMLStringTokenizer: CleanUp methods
// ---------------------------------------------------------------------------
inline void XMLStringTokenizer::cleanUp() {
delete [] fString;
delete [] fDelimeters;
delete fTokens;
}
// ---------------------------------------------------------------------------
// XMLStringTokenizer: Helper methods
// ---------------------------------------------------------------------------
inline bool XMLStringTokenizer::isDelimeter(const XMLCh ch) {
return XMLString::indexOf(fDelimeters, ch) == -1 ? false : true;
}
// ---------------------------------------------------------------------------
// XMLStringTokenizer: Management methods
// ---------------------------------------------------------------------------
inline int XMLStringTokenizer::countTokens() {
if (fStringLen == 0)
return 0;
int tokCount = 0;
bool inToken = false;
for (int i= fOffset; i< fStringLen; i++) {
if (isDelimeter(fString[i])) {
if (inToken) {
inToken = false;
}
continue;
}
if (!inToken) {
tokCount++;
inToken = true;
}
} // end for
return tokCount;
}
#endif
/**
* End of file XMLStringTokenizer.hpp
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org