dbertoni    2002/10/10 18:59:02

  Modified:    c/src/XPath XalanQName.cpp XalanQName.hpp
  Log:
  Temporary enhancements until the final removal of stack searching.
  
  Revision  Changes    Path
  1.5       +74 -48    xml-xalan/c/src/XPath/XalanQName.cpp
  
  Index: XalanQName.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XalanQName.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanQName.cpp    2 Apr 2002 06:11:31 -0000       1.4
  +++ XalanQName.cpp    11 Oct 2002 01:59:02 -0000      1.5
  @@ -79,8 +79,7 @@
   const XalanDOMString*
   XalanQName::getNamespaceForPrefix(
                        const NamespaceVectorType&      namespaces,
  -                     const XalanDOMString&           prefix,
  -                     bool                                            reverse)
  +                     const XalanDOMString&           prefix)
   {
        const XalanDOMString*   nsURI = 0;
   
  @@ -96,36 +95,17 @@
        {
                const NamespaceVectorType::size_type    theSize = 
namespaces.size();
   
  -             if (reverse)
  +             for(NamespaceVectorType::size_type j = theSize; j > 0; --j)
                {
  -                     for(NamespaceVectorType::size_type j = theSize; j > 0; 
--j)
  -                     {
  -                             const NameSpace&        ns = namespaces[j - 1];
  -
  -                             const XalanDOMString&   thisPrefix = 
ns.getPrefix();
  +                     const NameSpace&        ns = namespaces[j - 1];
   
  -                             if(::equals(prefix, thisPrefix))
  -                             {
  -                                     nsURI = &ns.getURI();
  +                     const XalanDOMString&   thisPrefix = ns.getPrefix();
   
  -                                     break;
  -                             }
  -                     }
  -             }
  -             else
  -             {
  -                     for(NamespaceVectorType::size_type j = 0; j < theSize; 
j++)
  +                     if(::equals(prefix, thisPrefix))
                        {
  -                             const NameSpace&        ns = namespaces[j];
  -
  -                             const XalanDOMString&   thisPrefix = 
ns.getPrefix();
  -
  -                             if(::equals(prefix, thisPrefix))
  -                             {
  -                                     nsURI = &ns.getURI();
  +                             nsURI = &ns.getURI();
   
  -                                     break;
  -                             }
  +                             break;
                        }
                }
        }
  @@ -138,22 +118,51 @@
   const XalanDOMString*
   XalanQName::getNamespaceForPrefix(
                        const NamespacesStackType&      nsStack,
  -                     const XalanDOMString&           prefix,
  -                     bool                                            reverse)
  +                     const XalanDOMString&           prefix)
   {
  +#if 1
  +     return getNamespaceForPrefix(nsStack.begin(), nsStack.end(), prefix);
  +#else
        const XalanDOMString*   nsURI = 0;
   
        for(NamespacesStackType::size_type i = nsStack.size(); i > 0; --i)
        {
                const NamespaceVectorType&      namespaces = nsStack[i - 1];
   
  -             nsURI = getNamespaceForPrefix(namespaces, prefix, reverse);
  +             nsURI = getNamespaceForPrefix(namespaces, prefix);
   
                if (nsURI != 0)
                        break;
        }
   
        return nsURI;
  +#endif
  +}
  +
  +
  +
  +const XalanDOMString*
  +XalanQName::getNamespaceForPrefix(
  +                     NamespacesStackType::const_iterator             
theBegin,
  +                     NamespacesStackType::const_iterator             theEnd,
  +                     const XalanDOMString&                                   
prefix)
  +{
  +     const XalanDOMString*   nsURI = 0;
  +
  +     if (theBegin != theEnd)
  +     {
  +             do
  +             {
  +                     nsURI = getNamespaceForPrefix(*(--theEnd), prefix);
  +
  +                     if (nsURI != 0)
  +                     {
  +                             break;
  +                     }
  +             } while(theBegin != theEnd);
  +     }
  +
  +     return nsURI;
   }
   
   
  @@ -161,12 +170,13 @@
   const XalanDOMString*
   XalanQName::getPrefixForNamespace(
                        const NamespaceVectorType&      namespaces,
  -                     const XalanDOMString&           uri,
  -                     bool                                            /* 
reverse */)
  +                     const XalanDOMString&           uri)
   {
        const XalanDOMString*   thePrefix = 0;
   
  -     for(NamespaceVectorType::size_type j = namespaces.size(); j > 0; --j)
  +     const NamespaceVectorType::size_type    theSize = namespaces.size();
  +
  +     for(NamespaceVectorType::size_type j = theSize; j > 0; --j)
        {
                const NameSpace&                ns = namespaces[j - 1];
                const XalanDOMString&   thisURI = ns.getURI();
  @@ -187,36 +197,52 @@
   const XalanDOMString*
   XalanQName::getPrefixForNamespace(
                        const NamespacesStackType&      nsStack,
  -                     const XalanDOMString&           uri,
  -                     bool                                            reverse)
  +                     const XalanDOMString&           uri)
   {
  +#if 1
  +     return getPrefixForNamespace(nsStack.begin(), nsStack.end(), uri);
  +#else
        const XalanDOMString*                                   thePrefix = 0;
   
        const NamespacesStackType::size_type    depth = nsStack.size();
   
  -     if (reverse)
  +     for(NamespacesStackType::size_type i = depth; i > 0; --i)
        {
  -             for(NamespacesStackType::size_type i = depth; i > 0; --i)
  -             {
  -                     const NamespaceVectorType&      namespaces = nsStack[i 
- 1];
  +             const NamespaceVectorType&      namespaces = nsStack[i - 1];
   
  -                     thePrefix = getPrefixForNamespace(namespaces, uri, 
reverse);
  +             thePrefix = getPrefixForNamespace(namespaces, uri);
   
  -                     if (thePrefix != 0)
  -                             break;
  +             if (thePrefix != 0)
  +             {
  +                     break;
                }
        }
  -     else
  +
  +     return thePrefix;
  +#endif
  +}
  +
  +
  +
  +const XalanDOMString*
  +XalanQName::getPrefixForNamespace(
  +                     NamespacesStackType::const_iterator             
theBegin,
  +                     NamespacesStackType::const_iterator             theEnd,
  +                     const XalanDOMString&                                   
uri)
  +{
  +     const XalanDOMString*   thePrefix = 0;
  +
  +     if (theBegin != theEnd)
        {
  -             for(NamespacesStackType::size_type i = 0; i < depth; i++)
  +             do
                {
  -                     const NamespaceVectorType&      namespaces = nsStack[i];
  -
  -                     thePrefix = getPrefixForNamespace(namespaces, uri, 
reverse);
  +                     thePrefix = getPrefixForNamespace(*(--theEnd), uri);
   
                        if (thePrefix != 0)
  +                     {
                                break;
  -             }
  +                     }
  +             } while(theBegin != theEnd);
        }
   
        return thePrefix;
  
  
  
  1.5       +38 -13    xml-xalan/c/src/XPath/XalanQName.hpp
  
  Index: XalanQName.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XalanQName.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XalanQName.hpp    6 May 2002 05:26:59 -0000       1.4
  +++ XalanQName.hpp    11 Oct 2002 01:59:02 -0000      1.5
  @@ -179,33 +179,45 @@
        }
   
        /**
  -      * Get the namespace from a prefix by searching a vector of namespaces.
  +      * Get the namespace for a prefix by searching a vector of namespaces.
         *
         * @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*
        getNamespaceForPrefix(
                        const NamespaceVectorType&      namespaces,
  -                     const XalanDOMString&           prefix,
  -                     bool                                            reverse 
= true);
  +                     const XalanDOMString&           prefix);
   
        /**
  -      * Get the namespace from a prefix by searching a stack of namespace
  +      * Get the namespace for a prefix by searching a stack of namespace
         * vectors.
         *
         * @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*
        getNamespaceForPrefix(
                        const NamespacesStackType&      nsStack,
  -                     const XalanDOMString&           prefix,
  -                     bool                                            reverse 
= true);
  +                     const XalanDOMString&           prefix);
  +
  +     /**
  +      * Get the namespace for a prefix by searching a range of iterators.
  +      * The search is done in reverse, from the end of the range to the
  +      * beginning.
  +      *
  +      * @param theBegin The beginning iterator for the range
  +      * @param theBegin The ending iterator for the range
  +      * @param prefix  namespace prefix to find
  +      * @return pointer to the string value if found, otherwise null.
  +      */
  +     static const XalanDOMString*
  +     getNamespaceForPrefix(
  +                     NamespacesStackType::const_iterator             
theBegin,
  +                     NamespacesStackType::const_iterator             theEnd,
  +                     const XalanDOMString&                                   
prefix);
   
        /**
         * Get the prefix for a namespace by searching a vector of namespaces.
  @@ -218,8 +230,7 @@
        static const XalanDOMString*
        getPrefixForNamespace(
                        const NamespaceVectorType&      namespaces,
  -                     const XalanDOMString&           uri,
  -                     bool                                            reverse 
= true);
  +                     const XalanDOMString&           uri);
   
        /**
         * Get the prefix for a namespace by searching a stack of namespace
  @@ -227,14 +238,28 @@
         *
         * @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*
        getPrefixForNamespace(
                        const NamespacesStackType&      nsStack,
  -                     const XalanDOMString&           uri,
  -                     bool                                            reverse 
= true);
  +                     const XalanDOMString&           uri);
  +
  +     /**
  +      * Get the prefix for a namespace by searching a range of iterators.
  +      * The search is done in reverse, from the end of the range to the
  +      * beginning.
  +      *
  +      * @param theBegin The beginning iterator for the range to search
  +      * @param theBegin The ending iterator for the range to search
  +      * @param uri     URI string for namespace to find
  +      * @return pointer to the string value if found, otherwise null.
  +      */
  +     static const XalanDOMString*
  +     getPrefixForNamespace(
  +                     NamespacesStackType::const_iterator             
theBegin,
  +                     NamespacesStackType::const_iterator             theEnd,
  +                     const XalanDOMString&                                   
uri);
   
        /**
         * Determine if the string supplied satisfies the grammar for
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to