You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2009/08/21 11:19:42 UTC
svn commit: r806472 - in /xerces/c/trunk: src/xercesc/util/XMLString.cpp
src/xercesc/util/XMLString.hpp
src/xercesc/validators/schema/TraverseSchema.cpp
tests/src/DOM/DOMTest/DTest.cpp tests/src/DOM/DOMTest/DTest.h
Author: amassari
Date: Fri Aug 21 09:19:38 2009
New Revision: 806472
URL: http://svn.apache.org/viewvc?rev=806472&view=rev
Log:
Added optimizations forgotten in previous commit, plus tests
Modified:
xerces/c/trunk/src/xercesc/util/XMLString.cpp
xerces/c/trunk/src/xercesc/util/XMLString.hpp
xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp
xerces/c/trunk/tests/src/DOM/DOMTest/DTest.h
Modified: xerces/c/trunk/src/xercesc/util/XMLString.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/XMLString.cpp?rev=806472&r1=806471&r2=806472&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/XMLString.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/XMLString.cpp Fri Aug 21 09:19:38 2009
@@ -1854,35 +1854,20 @@
void XMLString::replaceWS(XMLCh* toConvert
, MemoryManager* const manager)
{
- XMLSize_t strLen = XMLString::stringLen(toConvert);
- if (strLen == 0)
+ // If no string, then its a OK
+ if (( !toConvert ) || ( !*toConvert ))
return;
- XMLCh* retBuf = (XMLCh*) manager->allocate
- (
- (strLen+1) * sizeof(XMLCh)
- );//new XMLCh[strLen+1];
- XMLCh* retPtr = &retBuf[0];
- XMLCh* startPtr = toConvert;
-
- while ( *startPtr )
+ XMLCh* cursorPtr = toConvert;
+ while ( *cursorPtr )
{
- if ( ( *startPtr == chCR) ||
- ( *startPtr == chLF) ||
- ( *startPtr == chHTab))
- *retPtr = chSpace;
- else
- *retPtr = *startPtr;
+ if ( ( *cursorPtr == chCR) ||
+ ( *cursorPtr == chLF) ||
+ ( *cursorPtr == chHTab))
+ *cursorPtr = chSpace;
- retPtr++;
- startPtr++;
+ cursorPtr++;
}
-
- retBuf[strLen] = chNull;
-
- XMLString::moveChars(toConvert, retBuf, strLen);
- manager->deallocate(retBuf);//delete[] retBuf;
- return;
}
//
@@ -1960,31 +1945,27 @@
endPtr--;
*endPtr = chNull;
- XMLString::moveChars(toConvert, startPtr, endPtr - startPtr + 1);
+ // move data to beginning only if there were spaces in front
+ if(startPtr != toConvert)
+ XMLString::moveChars(toConvert, startPtr, endPtr - startPtr + 1);
+
if(!isWSCollapsed(toConvert))
{
//
// Work through what remains and chop continuous spaces
//
- XMLCh* retBuf = (XMLCh*) manager->allocate
- (
- (stringLen(toConvert) + 1) * sizeof(XMLCh)
- );
- XMLCh* retPtr = &retBuf[0];
- bool inSpace = false;
+ XMLCh* retPtr = toConvert;
startPtr = toConvert;
+ bool inSpace = false;
while (*startPtr)
{
if ( *startPtr == chSpace)
{
- if (inSpace)
- {
- //discard it;
- }
- else
+ // copy a single space, then ignore subsequent
+ if (!inSpace)
{
inSpace = true;
- *retPtr++ = chSpace; //copy the first chSpace
+ *retPtr++ = chSpace;
}
}
else
@@ -1997,26 +1978,20 @@
}
*retPtr = chNull;
- XMLString::moveChars(toConvert, retBuf, stringLen(retBuf)+1); //copy the last chNull as well
- manager->deallocate(retBuf);
}
}
//
// remove whitespace
//
-void XMLString::removeWS(XMLCh* const toConvert
+void XMLString::removeWS(XMLCh* toConvert
, MemoryManager* const manager)
{
// If no string, then its a failure
if (( !toConvert ) || ( !*toConvert ))
return;
- XMLCh* retBuf = (XMLCh*) manager->allocate
- (
- (XMLString::stringLen(toConvert) + 1) * sizeof(XMLCh)
- );//new XMLCh[ XMLString::stringLen(toConvert) + 1];
- XMLCh* retPtr = &retBuf[0];
+ XMLCh* retPtr = toConvert;
XMLCh* startPtr = toConvert;
while (*startPtr)
@@ -2030,13 +2005,9 @@
}
startPtr++;
-
}
*retPtr = chNull;
- XMLString::moveChars(toConvert, retBuf, stringLen(retBuf)+1); //copy the last chNull as well
- manager->deallocate(retBuf);//delete[] retBuf;
- return;
}
void XMLString::removeChar(const XMLCh* const srcString
Modified: xerces/c/trunk/src/xercesc/util/XMLString.hpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/XMLString.hpp?rev=806472&r1=806471&r2=806472&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/XMLString.hpp (original)
+++ xerces/c/trunk/src/xercesc/util/XMLString.hpp Fri Aug 21 09:19:38 2009
@@ -1433,7 +1433,7 @@
* On return , this buffer also holds the converted string
* @param manager The MemoryManager to use to allocate objects
*/
- static void removeWS(XMLCh* const toConvert
+ static void removeWS(XMLCh* toConvert
, MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
Modified: xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp?rev=806472&r1=806471&r2=806472&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp Fri Aug 21 09:19:38 2009
@@ -9357,26 +9357,28 @@
static short wsFacets[DatatypeValidator::ID] = {0};
if(!bInitialized)
{
- wsFacets[DatatypeValidator::String]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_STRING)->getWSFacet();
- wsFacets[DatatypeValidator::AnyURI]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_ANYURI)->getWSFacet();
- wsFacets[DatatypeValidator::QName]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_QNAME)->getWSFacet();
- wsFacets[DatatypeValidator::Name]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_NAME)->getWSFacet();
- wsFacets[DatatypeValidator::NCName]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_NCNAME)->getWSFacet();
- wsFacets[DatatypeValidator::Boolean]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_BOOLEAN)->getWSFacet();
- wsFacets[DatatypeValidator::Float]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_FLOAT)->getWSFacet();
- wsFacets[DatatypeValidator::Double]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_DOUBLE)->getWSFacet();
- wsFacets[DatatypeValidator::Decimal]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_DECIMAL)->getWSFacet();
- wsFacets[DatatypeValidator::HexBinary]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_HEXBINARY)->getWSFacet();
- wsFacets[DatatypeValidator::Base64Binary]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_BASE64BINARY)->getWSFacet();
- wsFacets[DatatypeValidator::Duration]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_DURATION)->getWSFacet();
- wsFacets[DatatypeValidator::DateTime]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_DATETIME)->getWSFacet();
- wsFacets[DatatypeValidator::Date]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_DATE)->getWSFacet();
- wsFacets[DatatypeValidator::Time]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_TIME)->getWSFacet();
- wsFacets[DatatypeValidator::MonthDay]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_MONTHDAY)->getWSFacet();
- wsFacets[DatatypeValidator::YearMonth]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_YEARMONTH)->getWSFacet();
- wsFacets[DatatypeValidator::Year]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_YEAR)->getWSFacet();
- wsFacets[DatatypeValidator::Month]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_MONTH)->getWSFacet();
- wsFacets[DatatypeValidator::Day]=DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_DAY)->getWSFacet();
+ bInitialized=true;
+ DVHashTable* registry = DatatypeValidatorFactory::getBuiltInRegistry();
+ wsFacets[DatatypeValidator::String] = registry->get(SchemaSymbols::fgDT_STRING)->getWSFacet();
+ wsFacets[DatatypeValidator::AnyURI] = registry->get(SchemaSymbols::fgDT_ANYURI)->getWSFacet();
+ wsFacets[DatatypeValidator::QName] = registry->get(SchemaSymbols::fgDT_QNAME)->getWSFacet();
+ wsFacets[DatatypeValidator::Name] = registry->get(SchemaSymbols::fgDT_NAME)->getWSFacet();
+ wsFacets[DatatypeValidator::NCName] = registry->get(SchemaSymbols::fgDT_NCNAME)->getWSFacet();
+ wsFacets[DatatypeValidator::Boolean] = registry->get(SchemaSymbols::fgDT_BOOLEAN)->getWSFacet();
+ wsFacets[DatatypeValidator::Float] = registry->get(SchemaSymbols::fgDT_FLOAT)->getWSFacet();
+ wsFacets[DatatypeValidator::Double] = registry->get(SchemaSymbols::fgDT_DOUBLE)->getWSFacet();
+ wsFacets[DatatypeValidator::Decimal] = registry->get(SchemaSymbols::fgDT_DECIMAL)->getWSFacet();
+ wsFacets[DatatypeValidator::HexBinary] = registry->get(SchemaSymbols::fgDT_HEXBINARY)->getWSFacet();
+ wsFacets[DatatypeValidator::Base64Binary]= registry->get(SchemaSymbols::fgDT_BASE64BINARY)->getWSFacet();
+ wsFacets[DatatypeValidator::Duration] = registry->get(SchemaSymbols::fgDT_DURATION)->getWSFacet();
+ wsFacets[DatatypeValidator::DateTime] = registry->get(SchemaSymbols::fgDT_DATETIME)->getWSFacet();
+ wsFacets[DatatypeValidator::Date] = registry->get(SchemaSymbols::fgDT_DATE)->getWSFacet();
+ wsFacets[DatatypeValidator::Time] = registry->get(SchemaSymbols::fgDT_TIME)->getWSFacet();
+ wsFacets[DatatypeValidator::MonthDay] = registry->get(SchemaSymbols::fgDT_MONTHDAY)->getWSFacet();
+ wsFacets[DatatypeValidator::YearMonth] = registry->get(SchemaSymbols::fgDT_YEARMONTH)->getWSFacet();
+ wsFacets[DatatypeValidator::Year] = registry->get(SchemaSymbols::fgDT_YEAR)->getWSFacet();
+ wsFacets[DatatypeValidator::Month] = registry->get(SchemaSymbols::fgDT_MONTH)->getWSFacet();
+ wsFacets[DatatypeValidator::Day] = registry->get(SchemaSymbols::fgDT_DAY)->getWSFacet();
}
short wsFacet = wsFacets[attType];
if((wsFacet == DatatypeValidator::REPLACE && !XMLString::isWSReplaced(attValue)) ||
Modified: xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp?rev=806472&r1=806471&r2=806472&view=diff
==============================================================================
--- xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp (original)
+++ xerces/c/trunk/tests/src/DOM/DOMTest/DTest.cpp Fri Aug 21 09:19:38 2009
@@ -950,6 +950,8 @@
OK &= test.testLSExceptions();
OK &= test.testElementTraversal();
+
+ OK &= test.testUtilFunctions();
}
XMLPlatformUtils::Terminate();
@@ -2743,11 +2745,27 @@
OK = false; \
}
+#include <xercesc/framework/StdOutFormatTarget.hpp>
+
bool DOMTest::testXPath(DOMDocument* document) {
bool OK = true;
+#if 0
+ XMLCh tempLS[3] = {chLatin_L, chLatin_S, chNull};
+ DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempLS);
+ DOMLSSerializer *theSerializer = ((DOMImplementationLS*)impl)->createLSSerializer();
+ DOMLSOutput *theOutputDesc = ((DOMImplementationLS*)impl)->createLSOutput();
+ StdOutFormatTarget myFormTarget;
+ theOutputDesc->setByteStream(&myFormTarget);
+ theSerializer->getDomConfig()->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true);
+ theSerializer->write(document, theOutputDesc);
+
+ theOutputDesc->release();
+ theSerializer->release();
+#endif
+
TEST_VALID_XPATH("*", 1, __LINE__);
- TEST_VALID_XPATH("dFirstElement/dTestBody/dBodyLevel24", 1, __LINE__);
+ TEST_VALID_XPATH("dTestBody/dBodyLevel24", 1, __LINE__);
TEST_VALID_XPATH("//dBodyLevel34", 1, __LINE__);
TEST_VALID_XPATH("/*", 1, __LINE__);
TEST_VALID_XPATH("/dFirstElement/dTestBody/dBodyLevel24", 1, __LINE__);
@@ -5482,3 +5500,113 @@
return OK;
}
+
+#define TEST_BOOLEAN(x) \
+ if(!x) \
+ { \
+ fprintf(stderr, "Boolean expression test failed at line %i\n", __LINE__); \
+ OK = false; \
+ }
+
+#define TEST_STRING(x,y) \
+ if(!XMLString::equals(x,y)) \
+ { \
+ fprintf(stderr, "String expression test failed at line %i\n", __LINE__); \
+ OK = false; \
+ }
+
+bool DOMTest::testUtilFunctions()
+{
+ bool OK = true;
+ // test isWSReplaced
+ XMLString::transcode(" xyz ", tempStr, 3999);
+ TEST_BOOLEAN(XMLString::isWSReplaced(tempStr));
+ XMLString::transcode(" x\tyz ", tempStr, 3999);
+ TEST_BOOLEAN(!XMLString::isWSReplaced(tempStr));
+ XMLString::transcode(" xyz\n", tempStr, 3999);
+ TEST_BOOLEAN(!XMLString::isWSReplaced(tempStr));
+ XMLString::transcode("\rxyz", tempStr, 3999);
+ TEST_BOOLEAN(!XMLString::isWSReplaced(tempStr));
+
+ // test replaceWS
+ XMLString::transcode(" x yz ", tempStr2, 3999);
+ XMLString::transcode(" x yz ", tempStr, 3999);
+ XMLString::replaceWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode(" x\tyz ", tempStr, 3999);
+ XMLString::replaceWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode(" x yz\n", tempStr, 3999);
+ XMLString::replaceWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("\rx yz ", tempStr, 3999);
+ XMLString::replaceWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+
+ // test isWSCollapsed
+ XMLString::transcode(" xyz ", tempStr, 3999);
+ TEST_BOOLEAN(!XMLString::isWSCollapsed(tempStr));
+ XMLString::transcode(" x\tyz ", tempStr, 3999);
+ TEST_BOOLEAN(!XMLString::isWSCollapsed(tempStr));
+ XMLString::transcode(" xyz\n", tempStr, 3999);
+ TEST_BOOLEAN(!XMLString::isWSCollapsed(tempStr));
+ XMLString::transcode("\rxyz", tempStr, 3999);
+ TEST_BOOLEAN(!XMLString::isWSCollapsed(tempStr));
+ XMLString::transcode("xyz", tempStr, 3999);
+ TEST_BOOLEAN(XMLString::isWSCollapsed(tempStr));
+ XMLString::transcode("x yz", tempStr, 3999);
+ TEST_BOOLEAN(XMLString::isWSCollapsed(tempStr));
+ XMLString::transcode("x yz", tempStr, 3999);
+ TEST_BOOLEAN(!XMLString::isWSCollapsed(tempStr));
+
+ // test collapseWS
+ XMLString::transcode("x yz", tempStr2, 3999);
+ XMLString::transcode(" x\tyz ", tempStr, 3999);
+ XMLString::collapseWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("x yz", tempStr, 3999);
+ XMLString::collapseWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("x yz", tempStr, 3999);
+ XMLString::collapseWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+
+ XMLString::transcode("xyz", tempStr2, 3999);
+ XMLString::transcode(" xyz ", tempStr, 3999);
+ XMLString::collapseWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode(" xyz\n", tempStr, 3999);
+ XMLString::collapseWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("\rxyz", tempStr, 3999);
+ XMLString::collapseWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("xyz", tempStr, 3999);
+ XMLString::collapseWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+
+ XMLString::transcode("xyz", tempStr2, 3999);
+ XMLString::transcode(" x\tyz ", tempStr, 3999);
+ XMLString::removeWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("x yz", tempStr, 3999);
+ XMLString::removeWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("x yz", tempStr, 3999);
+ XMLString::removeWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode(" xyz ", tempStr, 3999);
+ XMLString::removeWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode(" xyz\n", tempStr, 3999);
+ XMLString::removeWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("\rxyz", tempStr, 3999);
+ XMLString::removeWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+ XMLString::transcode("xyz", tempStr, 3999);
+ XMLString::removeWS(tempStr);
+ TEST_STRING(tempStr, tempStr2);
+
+ return OK;
+}
Modified: xerces/c/trunk/tests/src/DOM/DOMTest/DTest.h
URL: http://svn.apache.org/viewvc/xerces/c/trunk/tests/src/DOM/DOMTest/DTest.h?rev=806472&r1=806471&r2=806472&view=diff
==============================================================================
--- xerces/c/trunk/tests/src/DOM/DOMTest/DTest.h (original)
+++ xerces/c/trunk/tests/src/DOM/DOMTest/DTest.h Fri Aug 21 09:19:38 2009
@@ -112,6 +112,7 @@
bool testRegex();
bool testScanner(XercesDOMParser* parser);
+bool testUtilFunctions();
};
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org