You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2001/05/04 00:12:45 UTC
cvs commit: xml-xalan/c/src/XPath FunctionNormalizeSpace.cpp
dbertoni 01/05/03 15:12:45
Modified: c/src/XPath FunctionNormalizeSpace.cpp
Log:
Used cached string instead of stack-based vector.
Revision Changes Path
1.11 +17 -21 xml-xalan/c/src/XPath/FunctionNormalizeSpace.cpp
Index: FunctionNormalizeSpace.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionNormalizeSpace.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- FunctionNormalizeSpace.cpp 2001/01/25 17:14:11 1.10
+++ FunctionNormalizeSpace.cpp 2001/05/03 22:12:43 1.11
@@ -174,20 +174,15 @@
{
const unsigned int theStringLength = length(theString);
- // A vector to contain the new characters. We'll use it to construct
- // the result string.
-#if defined(XALAN_NO_NAMESPACES)
- typedef vector<XalanDOMChar> VectorType;
-#else
- typedef std::vector<XalanDOMChar> VectorType;
-#endif
+ // A string contain the result...
+ XPathExecutionContext::GetAndReleaseCachedString theResult(executionContext);
- // A vector to contain the result.
- VectorType theVector;
+ XalanDOMString& theNewString = theResult.get();
+ assert(length(theNewString) == 0);
// The result string can only be as large as the source string, so
// just reserve the space now.
- theVector.reserve(theStringLength);
+ reserve(theNewString, theStringLength);
bool fPreviousIsSpace = false;
@@ -204,10 +199,10 @@
// space character (not the original character).
if (fPreviousIsSpace == false)
{
- if (theVector.size() > 0 &&
+ if (length(theNewString) > 0 &&
i < theStringLength - 1)
{
- theVector.push_back(XalanDOMChar(XalanUnicode::charSpace));
+ append(theNewString, XalanDOMChar(XalanUnicode::charSpace));
}
fPreviousIsSpace = true;
@@ -215,28 +210,29 @@
}
else
{
- theVector.push_back(theCurrentChar);
+ append(theNewString, theCurrentChar);
fPreviousIsSpace = false;
}
}
- const VectorType::size_type theSize = theVector.size();
+ const unsigned int theNewStringLength = length(theNewString);
- if (theSize == 0)
+ if (theNewStringLength == 0)
{
return executionContext.getXObjectFactory().createString(XalanDOMString());
}
else
{
- if (isXMLWhitespace(theVector.back()) == true)
+ // We may have a space character at end, since we don't look ahead,
+ // so removed it now...
+ if (charAt(theNewString, theNewStringLength - 1) ==
+ XalanDOMChar(XalanUnicode::charSpace))
{
- return executionContext.getXObjectFactory().createString(&*theVector.begin(), theSize - 1);
+ theNewString.erase(theNewStringLength - 1, 1);
}
- else
- {
- return executionContext.getXObjectFactory().createString(&*theVector.begin(), theSize);
- }
+
+ return executionContext.getXObjectFactory().createString(theResult);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org