dbertoni    2002/08/27 15:00:29

  Modified:    c/src/XPath XObjectFactoryDefault.cpp
                        XObjectFactoryDefault.hpp XString.hpp
  Log:
  Added XString cacheing.
  
  Revision  Changes    Path
  1.27      +29 -4     xml-xalan/c/src/XPath/XObjectFactoryDefault.cpp
  
  Index: XObjectFactoryDefault.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XObjectFactoryDefault.cpp,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- XObjectFactoryDefault.cpp 23 Jul 2002 00:28:15 -0000      1.26
  +++ XObjectFactoryDefault.cpp 27 Aug 2002 22:00:28 -0000      1.27
  @@ -92,6 +92,7 @@
        m_xobjects(),
        m_xnumberCache(),
        m_xnodesetCache(),
  +     m_xstringCache(),
        m_XNull(new XNull),
        m_xbooleanFalse(new XBoolean(false)),
        m_xbooleanTrue(new XBoolean(true))
  @@ -174,7 +175,16 @@
                                static_cast<XString*>(theXObject);
   #endif
   
  -                     bStatus = m_xstringAllocator.destroy(theXString);
  +                     if (m_xstringCache.size() < eXStringCacheMax)
  +                     {
  +                             m_xstringCache.push_back(theXString);
  +
  +                             bStatus = true;
  +                     }
  +                     else
  +                     {
  +                             bStatus = 
m_xstringAllocator.destroy(theXString);
  +                     }
                }
                break;
   
  @@ -386,11 +396,26 @@
   const XObjectPtr
   XObjectFactoryDefault::createString(const XalanDOMString&    theValue)
   {
  -     XString* const  theXString = m_xstringAllocator.createString(theValue);
  +     if (m_xstringCache.empty() == false)
  +     {
  +             XString* const  theXString = m_xstringCache.back();
   
  -     theXString->setFactory(this);
  +             m_xstringCache.pop_back();
   
  -     return XObjectPtr(theXString);
  +             theXString->set(theValue);
  +
  +             return XObjectPtr(theXString);
  +     }
  +     else
  +     {
  +             m_xstringCache.reserve(eXStringCacheMax);
  +
  +             XString* const  theXString = 
m_xstringAllocator.createString(theValue);
  +
  +             theXString->setFactory(this);
  +
  +             return XObjectPtr(theXString);
  +     }
   }
   
   
  
  
  
  1.24      +11 -6     xml-xalan/c/src/XPath/XObjectFactoryDefault.hpp
  
  Index: XObjectFactoryDefault.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XObjectFactoryDefault.hpp,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- XObjectFactoryDefault.hpp 1 Nov 2001 15:57:13 -0000       1.23
  +++ XObjectFactoryDefault.hpp 27 Aug 2002 22:00:29 -0000      1.24
  @@ -117,6 +117,7 @@
                eDefaultXNodeSetBlockSize = 10,
                eXNumberCacheMax = 40,
                eXNodeSetCacheMax = 40,
  +             eXStringCacheMax = 40,
                eXResultTreeFragCacheMax = 40
        };
        
  @@ -184,13 +185,15 @@
                        const XalanDOMString&   theValue);
   
   #if defined(XALAN_NO_NAMESPACES)
  -     typedef vector<XObject*>                        XObjectCollectionType;
  -     typedef vector<XNumber*>                        XNumberCacheType;
  -     typedef vector<XNodeSet*>                       XNodeSetCacheType;
  +     typedef vector<XObject*>                XObjectCollectionType;
  +     typedef vector<XNumber*>                XNumberCacheType;
  +     typedef vector<XNodeSet*>               XNodeSetCacheType;
  +     typedef vector<XString*>                XStringCacheType;
   #else
  -     typedef std::vector<XObject*>                   XObjectCollectionType;
  -     typedef std::vector<XNumber*>                   XNumberCacheType;
  -     typedef std::vector<XNodeSet*>                  XNodeSetCacheType;
  +     typedef std::vector<XObject*>   XObjectCollectionType;
  +     typedef std::vector<XNumber*>   XNumberCacheType;
  +     typedef std::vector<XNodeSet*>  XNodeSetCacheType;
  +     typedef std::vector<XString*>   XStringCacheType;
   #endif
   
   protected:
  @@ -237,6 +240,8 @@
        XNumberCacheType                                m_xnumberCache;
   
        XNodeSetCacheType                               m_xnodesetCache;
  +
  +     XStringCacheType                                m_xstringCache;
   
        const XalanAutoPtr<XNull>               m_XNull;
   
  
  
  
  1.17      +6 -1      xml-xalan/c/src/XPath/XString.hpp
  
  Index: XString.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XString.hpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- XString.hpp       2 May 2001 15:53:05 -0000       1.16
  +++ XString.hpp       27 Aug 2002 22:00:29 -0000      1.17
  @@ -91,6 +91,11 @@
        virtual
        ~XString();
   
  +     void
  +     set(const XalanDOMString&       theString)
  +     {
  +             m_value = theString;
  +     }
   
        // These methods are inherited from XObject ...
   
  @@ -111,7 +116,7 @@
   
   private:
   
  -     const XalanDOMString    m_value;
  +     XalanDOMString  m_value;
   };
   
   
  
  
  

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

Reply via email to