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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to