dbertoni    2003/02/12 16:12:19

  Modified:    c/src/XPath FunctionID.cpp
  Log:
  More efficient implementation when only one token is involved.
  
  Revision  Changes    Path
  1.13      +33 -16    xml-xalan/c/src/XPath/FunctionID.cpp
  
  Index: FunctionID.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionID.cpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- FunctionID.cpp    24 Jan 2003 02:32:37 -0000      1.12
  +++ FunctionID.cpp    13 Feb 2003 00:12:19 -0000      1.13
  @@ -113,37 +113,54 @@
                                                                        
context->getOwnerDocument();
        assert(theDocContext != 0);
   
  -     typedef XPathExecutionContext::BorrowReturnMutableNodeRefList   
BorrowReturnMutableNodeRefList;
  -
  -     // This list will hold the nodes we find.
  -     BorrowReturnMutableNodeRefList  theNodeList(executionContext);
  -
  -     if (length(theResultString) > 0)
  +     if (theResultString.size() == 0)
  +     {
  +             return executionContext.getXObjectFactory().createNodeSet(0);
  +     }
  +     else
        {
                StringTokenizer         theTokenizer(theResultString);
   
                GetAndReleaseCachedString       theGuard2(executionContext);
   
  -             XalanDOMString&                         theToken = 
theGuard2.get();
  +             XalanDOMString&         theToken = theGuard2.get();
   
  -             // Parse the result string...
  -             while(theTokenizer.hasMoreTokens() == true)
  +             StringTokenizer::size_type      theTokenCount = 
theTokenizer.countTokens();
  +
  +             if (theTokenCount == 1)
                {
                        theTokenizer.nextToken(theToken);
   
  -                     if (length(theToken) > 0)
  +                     return 
executionContext.getXObjectFactory().createNodeSet(theDocContext->getElementById(theToken));
  +             }
  +             else
  +             {
  +                     assert(theTokenCount != 0);
  +
  +                     typedef 
XPathExecutionContext::BorrowReturnMutableNodeRefList   
BorrowReturnMutableNodeRefList;
  +
  +                     // This list will hold the nodes we find.
  +                     BorrowReturnMutableNodeRefList  
theNodeList(executionContext);
  +
  +                     // Parse the result string...
  +                     while(theTokenCount-- > 0)
                        {
  -                             XalanNode* const        theNode = 
theDocContext->getElementById(theToken);
  +                             theTokenizer.nextToken(theToken);
   
  -                             if (theNode != 0)
  +                             if (length(theToken) > 0)
                                {
  -                                     theNodeList->addNodeInDocOrder(theNode, 
executionContext);
  +                                     XalanNode* const        theNode = 
theDocContext->getElementById(theToken);
  +
  +                                     if (theNode != 0)
  +                                     {
  +                                             
theNodeList->addNodeInDocOrder(theNode, executionContext);
  +                                     }
                                }
                        }
  +
  +                     return 
executionContext.getXObjectFactory().createNodeSet(theNodeList);
                }
        }
  -
  -     return executionContext.getXObjectFactory().createNodeSet(theNodeList);
   }
   
   
  @@ -163,7 +180,7 @@
   const XalanDOMString
   FunctionID::getError() const
   {
  -     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The id() 
function takes one argument!"));
  +     return StaticStringToDOMString(XALAN_STATIC_UCODE_STRING("The id() 
function takes one argument"));
   }
   
   
  
  
  

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

Reply via email to