dbertoni    00/12/20 20:29:30

  Modified:    c/src/XPath FunctionConcat.cpp FunctionLocalName.cpp
                        FunctionName.cpp FunctionNamespaceURI.cpp
                        FunctionString.cpp FunctionSubstring.cpp
                        FunctionSubstringAfter.cpp
                        FunctionSubstringBefore.cpp FunctionTranslate.cpp
  Log:
  Use new cached string implementation.
  
  Revision  Changes    Path
  1.8       +9 -9      xml-xalan/c/src/XPath/FunctionConcat.cpp
  
  Index: FunctionConcat.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionConcat.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionConcat.cpp        2000/12/06 21:00:07     1.7
  +++ FunctionConcat.cpp        2000/12/21 04:29:29     1.8
  @@ -108,15 +108,15 @@
   {
        assert(arg1.null() == false && arg2.null() == false);   
   
  -     XalanDOMString  theResult;
  +     XPathExecutionContext::GetAndReleaseCachedString        
theResult(executionContext);
   
        const XalanDOMString&   theArg1 = arg1->str();
        const XalanDOMString&   theArg2 = arg2->str();
   
        reserve(theResult, length(theArg1) + length(theArg2) + 1);
   
  -     theResult += theArg1;
  -     theResult += theArg2;
  +     append(theResult, theArg1);
  +     append(theResult, theArg2);
   
        return executionContext.getXObjectFactory().createString(theResult);
   }
  @@ -133,7 +133,7 @@
   {
        assert(arg1.null() == false && arg2.null() == false && arg3.null() == 
false);   
   
  -     XalanDOMString  theResult;
  +     XPathExecutionContext::GetAndReleaseCachedString        
theResult(executionContext);
   
        const XalanDOMString&   theArg1 = arg1->str();
        const XalanDOMString&   theArg2 = arg2->str();
  @@ -141,9 +141,9 @@
   
        reserve(theResult, length(theArg1) + length(theArg2) + length(theArg3) 
+ 1);
   
  -     theResult += theArg1;
  -     theResult += theArg2;
  -     theResult += theArg3;
  +     append(theResult, theArg1);
  +     append(theResult, theArg2);
  +     append(theResult, theArg3);
   
        return executionContext.getXObjectFactory().createString(theResult);
   }
  @@ -172,7 +172,7 @@
                }
        }
   
  -     XalanDOMString  theResult;
  +     XPathExecutionContext::GetAndReleaseCachedString        
theResult(executionContext);
   
        reserve(theResult, theCombinedLength + 1);
   
  @@ -181,7 +181,7 @@
   
                for(; i != theEnd; ++i)
                {
  -                     theResult += (*i)->str();
  +                     append(theResult, (*i)->str());
                }
        }
   
  
  
  
  1.8       +1 -1      xml-xalan/c/src/XPath/FunctionLocalName.cpp
  
  Index: FunctionLocalName.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionLocalName.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionLocalName.cpp     2000/12/06 21:00:29     1.7
  +++ FunctionLocalName.cpp     2000/12/21 04:29:29     1.8
  @@ -170,7 +170,7 @@
                theType == XalanNode::ELEMENT_NODE ||
                theType == XalanNode::PROCESSING_INSTRUCTION_NODE)
        {
  -             return 
executionContext.getXObjectFactory().createString(executionContext.getLocalNameOfNode(node));
  +             return 
executionContext.getXObjectFactory().createStringReference(executionContext.getLocalNameOfNode(node));
        }
        else
        {
  
  
  
  1.6       +21 -19    xml-xalan/c/src/XPath/FunctionName.cpp
  
  Index: FunctionName.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionName.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FunctionName.cpp  2000/12/06 21:00:33     1.5
  +++ FunctionName.cpp  2000/12/21 04:29:29     1.6
  @@ -76,44 +76,46 @@
   
   XObjectPtr
   FunctionName::execute(
  -             XPathExecutionContext&                  executionContext,
  -             XalanNode*                                              context)
  +             XPathExecutionContext&  executionContext,
  +             XalanNode*                              context)
   {
  -     XalanDOMString  theData;
  -
        if (context == 0)
        {
                executionContext.error("The name() function requires a non-null 
context node!");
  +
  +        // Dummy return value...
  +        return 0;
        }
        else
  -     {       
  -             theData = executionContext.getNameOfNode(*context);             
  +     {
  +         return 
executionContext.getXObjectFactory().createStringReference(executionContext.getNameOfNode(*context));
        }
  -
  -     return executionContext.getXObjectFactory().createString(theData);      
   }
   
   
   
   XObjectPtr
   FunctionName::execute(
  -             XPathExecutionContext&                  executionContext,
  -             XalanNode*                                              /* 
context */,                  
  -             const XObjectPtr                                        arg1)
  +             XPathExecutionContext&  executionContext,
  +             XalanNode*                              /* context */,
  +             const XObjectPtr                arg1)
   {
        assert(arg1.null() == false);   
  -     
  -     XalanDOMString  theData;        
   
        const NodeRefListBase&  theNodeList = arg1->nodeset();
   
  -     if (theNodeList.getLength() > 0)
  +     if (theNodeList.getLength() == 0)
  +    {
  +         return 
executionContext.getXObjectFactory().createString(XalanDOMString());
  +    }
  +    else
        {
                assert(theNodeList.item(0) != 0);
  -             theData = executionContext.getNameOfNode(*theNodeList.item(0)); 
        
  -     }
  +
  +        const XalanDOMString&   theData = 
executionContext.getNameOfNode(*theNodeList.item(0));
   
  -     return executionContext.getXObjectFactory().createString(theData);      
  +         return 
executionContext.getXObjectFactory().createStringReference(theData);
  +     }
   }
   
   
  @@ -121,7 +123,7 @@
   XObjectPtr
   FunctionName::execute(
                        XPathExecutionContext&  executionContext,
  -                     XalanNode*                              context,        
                
  +                     XalanNode*                              context,        
                        const XObjectPtr                /* arg1 */,
                        const XObjectPtr                /* arg2 */)
   {
  @@ -135,7 +137,7 @@
   XObjectPtr
   FunctionName::execute(
                        XPathExecutionContext&  executionContext,
  -                     XalanNode*                              context,        
                
  +                     XalanNode*                              context,
                        const XObjectPtr                /* arg1 */,
                        const XObjectPtr                /* arg2 */,
                        const XObjectPtr                /* arg3 */)
  
  
  
  1.7       +2 -2      xml-xalan/c/src/XPath/FunctionNamespaceURI.cpp
  
  Index: FunctionNamespaceURI.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionNamespaceURI.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FunctionNamespaceURI.cpp  2000/12/06 21:00:34     1.6
  +++ FunctionNamespaceURI.cpp  2000/12/21 04:29:29     1.7
  @@ -91,7 +91,7 @@
                // The XPath standard says that if there are no arguments,
                // the argument defaults to a node set with the context node
                // as the only member.
  -             return 
executionContext.getXObjectFactory().createString(executionContext.getNamespaceOfNode(*context));
  +             return 
executionContext.getXObjectFactory().createStringReference(executionContext.getNamespaceOfNode(*context));
        }
   }
   
  @@ -115,7 +115,7 @@
        {
                assert(theList.item(0) != 0);
   
  -             return 
executionContext.getXObjectFactory().createString(executionContext.getNamespaceOfNode(*theList.item(0)));
  +             return 
executionContext.getXObjectFactory().createStringReference(executionContext.getNamespaceOfNode(*theList.item(0)));
        }
   }
   
  
  
  
  1.8       +1 -2      xml-xalan/c/src/XPath/FunctionString.cpp
  
  Index: FunctionString.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionString.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FunctionString.cpp        2000/12/06 21:00:52     1.7
  +++ FunctionString.cpp        2000/12/21 04:29:29     1.8
  @@ -117,7 +117,7 @@
   {
        assert(arg1.null() == false);   
        
  -     return executionContext.getXObjectFactory().createString(arg1->str());
  +     return executionContext.getXObjectFactory().createStringAdapter(arg1);
   }
   
   
  @@ -182,4 +182,3 @@
   {
        return XALAN_STATIC_UCODE_STRING("The string() function takes zero or 
one argument!");
   }
  -
  
  
  
  1.10      +8 -3      xml-xalan/c/src/XPath/FunctionSubstring.cpp
  
  Index: FunctionSubstring.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionSubstring.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- FunctionSubstring.cpp     2000/12/06 21:00:57     1.9
  +++ FunctionSubstring.cpp     2000/12/21 04:29:29     1.10
  @@ -252,9 +252,14 @@
                                                theStartIndex,
                                                theTotal);
   
  -                             return 
executionContext.getXObjectFactory().createString(
  -                                                             
toCharArray(theSourceString) + theStartIndex,
  -                                                             
theSubstringLength);
  +                             
XPathExecutionContext::GetAndReleaseCachedString        
theResult(executionContext);
  +
  +                             assign(
  +                                             theResult,
  +                                             toCharArray(theSourceString) + 
theStartIndex,
  +                                             theSubstringLength );
  +
  +                             return 
executionContext.getXObjectFactory().createString(theResult);
                        }
                }
        }
  
  
  
  1.9       +8 -1      xml-xalan/c/src/XPath/FunctionSubstringAfter.cpp
  
  Index: FunctionSubstringAfter.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionSubstringAfter.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FunctionSubstringAfter.cpp        2000/12/06 21:00:59     1.8
  +++ FunctionSubstringAfter.cpp        2000/12/21 04:29:29     1.9
  @@ -141,7 +141,14 @@
                        const unsigned int              theSubstringLength =
                                theFirstStringLength  - theIndex - 
theSecondStringLength;
   
  -                     return 
executionContext.getXObjectFactory().createString(theFirstCharacter, 
theSubstringLength);
  +                     XPathExecutionContext::GetAndReleaseCachedString        
theResult(executionContext);
  +
  +                     assign(
  +                                     theResult,
  +                                     theFirstCharacter,
  +                                     theSubstringLength);
  +
  +                     return 
executionContext.getXObjectFactory().createString(theResult);
                }
        }
   }
  
  
  
  1.9       +7 -2      xml-xalan/c/src/XPath/FunctionSubstringBefore.cpp
  
  Index: FunctionSubstringBefore.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionSubstringBefore.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FunctionSubstringBefore.cpp       2000/12/06 21:01:01     1.8
  +++ FunctionSubstringBefore.cpp       2000/12/21 04:29:29     1.9
  @@ -129,10 +129,15 @@
                }
                else
                {
  -                     // Create a string of the appropriate length...
  -                     return 
executionContext.getXObjectFactory().createString(
  +                     XPathExecutionContext::GetAndReleaseCachedString        
theResult(executionContext);
  +
  +                     assign(
  +                                     theResult,
                                        toCharArray(theFirstString),
                                        theIndex);
  +
  +                     // Create a string of the appropriate length...
  +                     return 
executionContext.getXObjectFactory().createString(theResult);
                }
        }
   }
  
  
  
  1.9       +6 -16     xml-xalan/c/src/XPath/FunctionTranslate.cpp
  
  Index: FunctionTranslate.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/FunctionTranslate.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FunctionTranslate.cpp     2000/12/06 21:01:07     1.8
  +++ FunctionTranslate.cpp     2000/12/21 04:29:29     1.9
  @@ -137,14 +137,13 @@
        typedef std::vector<XalanDOMChar>       VectorType;
   #endif
   
  -     // A vector to contain the new characters.  We'll use it to construct
  -     // the result string.
  -     VectorType      theBuffer;
  +     // A string to hold the result.
  +     XPathExecutionContext::GetAndReleaseCachedString        
theResult(executionContext);
   
        // The result string can only be as large as the first string, so
        // just reserve the space now.  Also reserve space for the
        // terminating 0.
  -     theBuffer.reserve(theFirstStringLength + 1);
  +     reserve(theResult, theFirstStringLength + 1);
   
        for (unsigned int i = 0; i < theFirstStringLength; i++)
        {
  @@ -156,13 +155,13 @@
                {
                        // Didn't find the character in the second string, so it
                        // is not translated.
  -                     theBuffer.push_back(theCurrentChar);
  +                     append(theResult, theCurrentChar);
                }
                else if (theIndex < theThirdStringLength)
                {
                        // OK, there's a corresponding character in the
                        // third string, so do the translation...
  -                     theBuffer.push_back(charAt(theThirdString, theIndex));
  +                     append(theResult, charAt(theThirdString, theIndex));
                }
                else
                {
  @@ -174,16 +173,7 @@
                }
        }
   
  -     const VectorType::size_type             theSize = theBuffer.size();     
  -     
  -     if (theSize == 0)
  -     {
  -             return 
executionContext.getXObjectFactory().createString(XalanDOMString());
  -     }
  -     else
  -     {
  -             return 
executionContext.getXObjectFactory().createString(&*theBuffer.begin(), theSize);
  -     }
  +     return executionContext.getXObjectFactory().createString(theResult);
   }
   
   
  
  
  

Reply via email to