You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ca...@apache.org on 2007/07/23 19:26:05 UTC
svn commit: r558806 - in /xerces/c/branches/xerces-2.7/src/xercesc:
dom/impl/ framework/psvi/ util/ validators/datatype/
Author: cargilld
Date: Mon Jul 23 10:26:03 2007
New Revision: 558806
URL: http://svn.apache.org/viewvc?view=rev&rev=558806
Log:
Performance patch for xerces-1657 from Christian Will
Modified:
xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentImpl.cpp
xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp
xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMImplementationImpl.cpp
xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp
xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.cpp
xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.hpp
xerces/c/branches/xerces-2.7/src/xercesc/validators/datatype/NameDatatypeValidator.cpp
Modified: xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentImpl.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentImpl.cpp?view=diff&rev=558806&r1=558805&r2=558806
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentImpl.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentImpl.cpp Mon Jul 23 10:26:03 2007
@@ -527,9 +527,9 @@
bool DOMDocumentImpl::isXMLName(const XMLCh *s)
{
if (XMLString::equals(fVersion, XMLUni::fgVersion1_1))
- return XMLChar1_1::isValidName(s, XMLString::stringLen(s));
+ return XMLChar1_1::isValidName(s);
else
- return XMLChar1_0::isValidName(s, XMLString::stringLen(s));
+ return XMLChar1_0::isValidName(s);
}
Modified: xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp?view=diff&rev=558806&r1=558805&r2=558806
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp Mon Jul 23 10:26:03 2007
@@ -147,7 +147,7 @@
}
else {
// document is not there yet, so assume XML 1.0
- if (!XMLChar1_0::isValidName(newName, index) || !XMLChar1_0::isValidName(qualifiedName+index+1, XMLString::stringLen(qualifiedName)-index-1))
+ if (!XMLChar1_0::isValidName(newName) || !XMLChar1_0::isValidName(qualifiedName+index+1))
throw DOMException(DOMException::NAMESPACE_ERR, 0, GetDOMNodeMemoryManager);
}
Modified: xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMImplementationImpl.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMImplementationImpl.cpp?view=diff&rev=558806&r1=558805&r2=558806
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMImplementationImpl.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/dom/impl/DOMImplementationImpl.cpp Mon Jul 23 10:26:03 2007
@@ -215,7 +215,7 @@
const XMLCh * publicId, const XMLCh *systemId)
{
// assume XML 1.0 since we do not know its version yet.
- if(!XMLChar1_0::isValidName(qualifiedName, XMLString::stringLen(qualifiedName)))
+ if(!XMLChar1_0::isValidName(qualifiedName))
throw DOMException(DOMException::INVALID_CHARACTER_ERR, 0);
//to do: do we need to create with user's memorymanager???
Modified: xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp?view=diff&rev=558806&r1=558805&r2=558806
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/framework/psvi/XSValue.cpp Mon Jul 23 10:26:03 2007
@@ -947,8 +947,8 @@
}
case XSValue::dt_Name:
isValid = (version == ver_10) ?
- XMLChar1_0::isValidName(content, XMLString::stringLen(content)) :
- XMLChar1_1::isValidName(content, XMLString::stringLen(content));
+ XMLChar1_0::isValidName(content) :
+ XMLChar1_1::isValidName(content);
break;
case XSValue::dt_NCName:
case XSValue::dt_ID:
@@ -988,7 +988,7 @@
default:
status = st_NotSupported;
isValid = false;
- break;
+ break;
}
if (isValid == false && status == st_Init) {
@@ -1139,11 +1139,11 @@
catch (SchemaDateTimeException &e)
{
- status = checkTimeZoneError(datatype, e)? XSValue::st_FODT0003 : st_FOCA0002;
+ status = checkTimeZoneError(datatype, e)? XSValue::st_FODT0003 : st_FOCA0002;
}
catch (const NumberFormatException&)
{
- status = st_FOCA0002;
+ status = st_FOCA0002;
}
return 0;
}
@@ -1228,16 +1228,16 @@
break;
default:
return 0;
- break;
+ break;
}
return 0;
}
-XSValue*
+XSValue*
XSValue::getActValNumerics(const XMLCh* const content
, DataType datatype
- , Status& status
+ , Status& status
, bool toValidate
, MemoryManager* const manager)
{
@@ -1415,11 +1415,11 @@
}
catch (const NumberFormatException&)
{
- status = st_FOCA0002;
+ status = st_FOCA0002;
}
return 0;
}
-
+
XSValue*
XSValue::getActValDateTimes(const XMLCh* const input_content
, DataType datatype
@@ -1505,13 +1505,13 @@
}
catch (SchemaDateTimeException const &e)
{
- status = checkTimeZoneError(datatype, e)? XSValue::st_FODT0003 : st_FOCA0002;
+ status = checkTimeZoneError(datatype, e)? XSValue::st_FODT0003 : st_FOCA0002;
}
catch (const NumberFormatException&)
{
- status = st_FOCA0002;
+ status = st_FOCA0002;
}
- return 0;
+ return 0;
}
XSValue*
@@ -1612,7 +1612,7 @@
break;
default:
return 0;
- break;
+ break;
}
return 0;
@@ -1628,7 +1628,7 @@
, DataType datatype)
{
char *nptr = XMLString::transcode(content, manager);
- ArrayJanitor<char> jan(nptr, manager);
+ ArrayJanitor<char> jan(nptr, manager);
char *endptr = 0;
errno = 0;
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.cpp?view=diff&rev=558806&r1=558805&r2=558806
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.cpp Mon Jul 23 10:26:03 2007
@@ -116,6 +116,25 @@
return true;
}
+bool XMLChar1_0::isValidName(const XMLCh* const toCheck)
+{
+ const XMLCh* curCh = toCheck;
+
+ if ((fgCharCharsTable1_0[*curCh++] & gFirstNameCharMask))
+ {
+ while ((fgCharCharsTable1_0[*curCh] & gNameCharMask))
+ {
+ curCh++;
+ }
+
+ if (*curCh == 0)
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
/**
* isValidQName
*
@@ -4523,6 +4542,76 @@
}
}
gotLeadingSurrogate = false;
+ }
+ }
+ return true;
+}
+
+bool XMLChar1_1::isValidName(const XMLCh* const toCheck)
+{
+ const XMLCh* curCh = toCheck;
+
+ XMLCh nextCh = *curCh++;
+ if ((nextCh >= 0xD800) && (nextCh <= 0xDB7F))
+ {
+ nextCh = *curCh++;
+ if ((nextCh < 0xDC00) || (nextCh > 0xDFFF))
+ {
+ return false;
+ }
+ }
+ else if (!(fgCharCharsTable1_1[nextCh] & gFirstNameCharMask))
+ {
+ return false;
+ }
+
+ bool gotLeadingSurrogate = false;
+
+ while (*curCh != 0)
+ {
+ nextCh = *curCh++;
+
+ // Deal with surrogate pairs
+ if ((nextCh >= 0xD800) && (nextCh <= 0xDBFF))
+ {
+ // Its a leading surrogate. If we already got one, then
+ // issue an error, else set leading flag to make sure that
+ // we look for a trailing next time.
+ if (nextCh > 0xDB7F || gotLeadingSurrogate)
+ {
+ return false;
+ }
+ else
+ {
+ gotLeadingSurrogate = true;
+ }
+ }
+ else
+ {
+ // If its a trailing surrogate, make sure that we are
+ // prepared for that. Else, its just a regular char so make
+ // sure that we were not expected a trailing surrogate.
+ if ((nextCh >= 0xDC00) && (nextCh <= 0xDFFF))
+ {
+ // Its trailing, so make sure we were expecting it
+ if (!gotLeadingSurrogate)
+ return false;
+ }
+ else
+ {
+ // Its just a char, so make sure we were not expecting a
+ // trailing surrogate.
+ if (gotLeadingSurrogate)
+ {
+ return false;
+ }
+ // Its got to at least be a valid XML character
+ else if (!(fgCharCharsTable1_1[nextCh] & gNameCharMask))
+ {
+ return false;
+ }
+ }
+ gotLeadingSurrogate = false;
}
}
return true;
Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.hpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.hpp?view=diff&rev=558806&r1=558805&r2=558806
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.hpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/XMLChar.hpp Mon Jul 23 10:26:03 2007
@@ -71,6 +71,11 @@
, const unsigned int count
);
+ static bool isValidName
+ (
+ const XMLCh* const toCheck
+ );
+
static bool isValidNCName
(
const XMLCh* const toCheck
@@ -270,6 +275,11 @@
(
const XMLCh* const toCheck
, const unsigned int count
+ );
+
+ static bool isValidName
+ (
+ const XMLCh* const toCheck
);
static bool isValidNCName
Modified: xerces/c/branches/xerces-2.7/src/xercesc/validators/datatype/NameDatatypeValidator.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/validators/datatype/NameDatatypeValidator.cpp?view=diff&rev=558806&r1=558805&r2=558806
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/validators/datatype/NameDatatypeValidator.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/validators/datatype/NameDatatypeValidator.cpp Mon Jul 23 10:26:03 2007
@@ -23,6 +23,7 @@
// ---------------------------------------------------------------------------
#include <xercesc/validators/datatype/NameDatatypeValidator.hpp>
#include <xercesc/validators/datatype/InvalidDatatypeValueException.hpp>
+#include <xercesc/util/XMLChar.hpp>
XERCES_CPP_NAMESPACE_BEGIN
@@ -97,7 +98,7 @@
//
// 3.3.6 check must: "Name"
//
- if ( !XMLString::isValidName(content))
+ if ( !XMLChar1_0::isValidName(content))
{
ThrowXMLwithMemMgr2(InvalidDatatypeValueException
, XMLExcepts::VALUE_Invalid_Name
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org