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/14 03:01:19 UTC
cvs commit: xml-xalan/c/src/XPath ElementPrefixResolverProxy.cpp ElementPrefixResolverProxy.hpp QName.cpp QName.hpp QNameByValue.cpp XPathExecutionContext.hpp XPathExecutionContextDefault.cpp XPathExecutionContextDefault.hpp XPathProcessorImpl.cpp
dbertoni 01/05/13 18:01:19
Modified: c/src/XPath ElementPrefixResolverProxy.cpp
ElementPrefixResolverProxy.hpp QName.cpp QName.hpp
QNameByValue.cpp XPathExecutionContext.hpp
XPathExecutionContextDefault.cpp
XPathExecutionContextDefault.hpp
XPathProcessorImpl.cpp
Log:
Return pointers to string instead of references for namespace-related functions, to support empty namespace URIs.
Revision Changes Path
1.6 +2 -6 xml-xalan/c/src/XPath/ElementPrefixResolverProxy.cpp
Index: ElementPrefixResolverProxy.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/ElementPrefixResolverProxy.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ElementPrefixResolverProxy.cpp 2001/01/08 18:28:21 1.5
+++ ElementPrefixResolverProxy.cpp 2001/05/14 01:01:15 1.6
@@ -75,10 +75,6 @@
-const XalanDOMString ElementPrefixResolverProxy::s_emptyString;
-
-
-
ElementPrefixResolverProxy::ElementPrefixResolverProxy(
const XalanElement* namespaceContext,
const XPathEnvSupport& envSupport,
@@ -98,12 +94,12 @@
-const XalanDOMString&
+const XalanDOMString*
ElementPrefixResolverProxy::getNamespaceForPrefix(const XalanDOMString& prefix) const
{
if (m_namespaceContext == 0)
{
- return s_emptyString;
+ return 0;
}
else
{
1.8 +1 -4 xml-xalan/c/src/XPath/ElementPrefixResolverProxy.hpp
Index: ElementPrefixResolverProxy.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/ElementPrefixResolverProxy.hpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ElementPrefixResolverProxy.hpp 2001/01/31 01:40:33 1.7
+++ ElementPrefixResolverProxy.hpp 2001/05/14 01:01:15 1.8
@@ -100,7 +100,7 @@
// These methods are inherited from PrefixResolver ...
- virtual const XalanDOMString&
+ virtual const XalanDOMString*
getNamespaceForPrefix(const XalanDOMString& prefix) const;
virtual const XalanDOMString&
@@ -115,9 +115,6 @@
const DOMSupport& m_domSupport;
mutable XalanDOMString m_uri;
-
- // A dummy string to return when we need an emtpy string...
- static const XalanDOMString s_emptyString;
};
1.16 +18 -26 xml-xalan/c/src/XPath/QName.cpp
Index: QName.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/QName.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- QName.cpp 2001/04/30 18:10:58 1.15
+++ QName.cpp 2001/05/14 01:01:15 1.16
@@ -76,13 +76,13 @@
-const XalanDOMString&
+const XalanDOMString*
QName::getNamespaceForPrefix(
const NamespaceVectorType& namespaces,
const XalanDOMString& prefix,
bool reverse)
{
- const XalanDOMString* nsURI = &s_emptyString;
+ const XalanDOMString* nsURI = 0;
if(::equals(prefix, DOMServices::s_XMLString))
{
@@ -124,20 +124,18 @@
}
}
- assert(nsURI != 0);
-
- return *nsURI;
+ return nsURI;
}
-const XalanDOMString&
+const XalanDOMString*
QName::getNamespaceForPrefix(
const NamespacesStackType& nsStack,
const XalanDOMString& prefix,
bool reverse)
{
- const XalanDOMString* nsURI = &s_emptyString;
+ const XalanDOMString* nsURI = 0;
const int depth = nsStack.size();
@@ -145,26 +143,24 @@
{
const NamespaceVectorType& namespaces = nsStack[i];
- nsURI = &QName::getNamespaceForPrefix(namespaces, prefix, reverse);
+ nsURI = getNamespaceForPrefix(namespaces, prefix, reverse);
- if (! ::isEmpty(*nsURI))
+ if (nsURI != 0)
break;
}
-
- assert(nsURI != 0);
- return *nsURI;
+ return nsURI;
}
-const XalanDOMString&
+const XalanDOMString*
QName::getPrefixForNamespace(
const NamespaceVectorType& namespaces,
const XalanDOMString& uri,
bool /* reverse */)
{
- const XalanDOMString* thePrefix = &s_emptyString;
+ const XalanDOMString* thePrefix = 0;
for(int j = namespaces.size()-1; j >= 0; j--)
{
@@ -179,20 +175,18 @@
}
}
- assert(thePrefix != 0);
-
- return *thePrefix;
+ return thePrefix;
}
-const XalanDOMString&
+const XalanDOMString*
QName::getPrefixForNamespace(
const NamespacesStackType& nsStack,
const XalanDOMString& uri,
bool reverse)
{
- const XalanDOMString* thePrefix = &s_emptyString;
+ const XalanDOMString* thePrefix = 0;
const int depth = nsStack.size();
@@ -202,9 +196,9 @@
{
const NamespaceVectorType& namespaces = nsStack[i];
- thePrefix = &QName::getPrefixForNamespace(namespaces, uri, reverse);
+ thePrefix = getPrefixForNamespace(namespaces, uri, reverse);
- if (! ::isEmpty(*thePrefix))
+ if (thePrefix != 0)
break;
}
}
@@ -214,14 +208,12 @@
{
const NamespaceVectorType& namespaces = nsStack[i];
- thePrefix = &QName::getPrefixForNamespace(namespaces, uri, reverse);
+ thePrefix = getPrefixForNamespace(namespaces, uri, reverse);
- if (! ::isEmpty(*thePrefix))
+ if (thePrefix != 0)
break;
}
}
-
- assert(thePrefix != 0);
- return *thePrefix;
+ return thePrefix;
}
1.14 +8 -4 xml-xalan/c/src/XPath/QName.hpp
Index: QName.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/QName.hpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- QName.hpp 2001/04/23 14:19:05 1.13
+++ QName.hpp 2001/05/14 01:01:15 1.14
@@ -173,8 +173,9 @@
* @param namespaces vector of namespaces to search
* @param prefix namespace prefix to find
* @param reverse true to search vector from last to first, default true
+ * @return pointer to the string value if found, otherwise null.
*/
- static const XalanDOMString&
+ static const XalanDOMString*
getNamespaceForPrefix(
const NamespaceVectorType& namespaces,
const XalanDOMString& prefix,
@@ -187,8 +188,9 @@
* @param nsStack stack of namespace vectors to search
* @param prefix namespace prefix to find
* @param reverse true to search vector from last to first, default true
+ * @return pointer to the string value if found, otherwise null.
*/
- static const XalanDOMString&
+ static const XalanDOMString*
getNamespaceForPrefix(
const NamespacesStackType& nsStack,
const XalanDOMString& prefix,
@@ -200,8 +202,9 @@
* @param namespaces vector of namespaces to search
* @param uri URI string for namespace to find
* @param reverse true to search vector from last to first, default true
+ * @return pointer to the string value if found, otherwise null.
*/
- static const XalanDOMString&
+ static const XalanDOMString*
getPrefixForNamespace(
const NamespaceVectorType& namespaces,
const XalanDOMString& uri,
@@ -214,8 +217,9 @@
* @param nsStack stack of namespace vectors to search
* @param uri URI string for namespace to find
* @param reverse true to search vector from last to first, default true
+ * @return pointer to the string value if found, otherwise null.
*/
- static const XalanDOMString&
+ static const XalanDOMString*
getPrefixForNamespace(
const NamespacesStackType& nsStack,
const XalanDOMString& uri,
1.4 +14 -3 xml-xalan/c/src/XPath/QNameByValue.cpp
Index: QNameByValue.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/QNameByValue.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- QNameByValue.cpp 2001/01/31 01:40:33 1.3
+++ QNameByValue.cpp 2001/05/14 01:01:16 1.4
@@ -197,12 +197,17 @@
if(::equals(prefix, DOMServices::s_XMLNamespace))
return;
- m_namespace = getNamespaceForPrefix(namespaces, prefix);
+ const XalanDOMString* const theNamespace =
+ getNamespaceForPrefix(namespaces, prefix);
- if(0 == length(m_namespace))
+ if(theNamespace == 0 || 0 == length(*theNamespace))
{
throw XSLException(TranscodeFromLocalCodePage("Prefix must resolve to a namespace: ") + prefix);
}
+ else
+ {
+ m_namespace = *theNamespace;
+ }
m_localpart = substring(qname, indexOfNSSep + 1);
}
@@ -237,7 +242,13 @@
}
else
{
- m_namespace = theResolver.getNamespaceForPrefix(prefix);
+ const XalanDOMString* const theNamespace =
+ theResolver.getNamespaceForPrefix(prefix);
+
+ if (theNamespace != 0)
+ {
+ m_namespace = *theNamespace;
+ }
}
if(0 == length(m_namespace))
1.39 +1 -1 xml-xalan/c/src/XPath/XPathExecutionContext.hpp
Index: XPathExecutionContext.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContext.hpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- XPathExecutionContext.hpp 2001/03/29 22:18:35 1.38
+++ XPathExecutionContext.hpp 2001/05/14 01:01:16 1.39
@@ -668,7 +668,7 @@
* @param prefix prefix for a namespace
* @return URI corresponding to namespace
*/
- virtual const XalanDOMString&
+ virtual const XalanDOMString*
getNamespaceForPrefix(const XalanDOMString& prefix) const = 0;
/**
1.37 +1 -1 xml-xalan/c/src/XPath/XPathExecutionContextDefault.cpp
Index: XPathExecutionContextDefault.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContextDefault.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- XPathExecutionContextDefault.cpp 2001/05/10 17:57:12 1.36
+++ XPathExecutionContextDefault.cpp 2001/05/14 01:01:16 1.37
@@ -406,7 +406,7 @@
-const XalanDOMString&
+const XalanDOMString*
XPathExecutionContextDefault::getNamespaceForPrefix(const XalanDOMString& prefix) const
{
assert(m_prefixResolver != 0);
1.35 +1 -1 xml-xalan/c/src/XPath/XPathExecutionContextDefault.hpp
Index: XPathExecutionContextDefault.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContextDefault.hpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- XPathExecutionContextDefault.hpp 2001/05/10 17:57:13 1.34
+++ XPathExecutionContextDefault.hpp 2001/05/14 01:01:16 1.35
@@ -272,7 +272,7 @@
virtual void
setPrefixResolver(const PrefixResolver* thePrefixResolver);
- virtual const XalanDOMString&
+ virtual const XalanDOMString*
getNamespaceForPrefix(const XalanDOMString& prefix) const;
virtual XalanDocument*
1.38 +13 -9 xml-xalan/c/src/XPath/XPathProcessorImpl.cpp
Index: XPathProcessorImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathProcessorImpl.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- XPathProcessorImpl.cpp 2001/04/18 14:46:13 1.37
+++ XPathProcessorImpl.cpp 2001/05/14 01:01:17 1.38
@@ -588,14 +588,15 @@
{
assert(m_prefixResolver != 0);
- const XalanDOMString prefix = substring(pat, startSubstring, posOfNSSep);
+ const XalanDOMString prefix =
+ substring(pat, startSubstring, posOfNSSep);
- const XalanDOMString uName =
+ const XalanDOMString* const uName =
m_prefixResolver->getNamespaceForPrefix(prefix);
- if(length(uName) > 0)
+ if(uName != 0 && length(*uName) > 0)
{
- addToTokenQueue(uName);
+ addToTokenQueue(*uName);
addToTokenQueue(DOMServices::s_XMLNamespaceSeparatorString);
@@ -2052,14 +2053,17 @@
m_expression->getRelativeToken(-1);
assert(theToken != 0);
- const XalanDOMString& theString = theToken->str();
+ const XalanDOMString& theString = theToken->str();
- const XalanDOMString& theNamespace =
+ const XalanDOMString* const theNamespace =
m_prefixResolver->getNamespaceForPrefix(theString);
- m_expression->replaceRelativeToken(
- -1,
- theNamespace);
+ if (theNamespace != 0)
+ {
+ m_expression->replaceRelativeToken(
+ -1,
+ *theNamespace);
+ }
}
m_expression->pushCurrentTokenOnOpCodeMap();
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org