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