dbertoni    00/12/20 20:43:49

  Modified:    c/src/XPath XObject.cpp XObject.hpp XObjectFactory.hpp
                        XObjectFactoryDefault.cpp XObjectFactoryDefault.hpp
  Log:
  Changes for new XString subclasses.
  
  Revision  Changes    Path
  1.17      +9 -1      xml-xalan/c/src/XPath/XObject.cpp
  
  Index: XObject.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XObject.cpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- XObject.cpp       2000/11/30 21:57:56     1.16
  +++ XObject.cpp       2000/12/21 04:43:48     1.17
  @@ -59,7 +59,7 @@
   
   
   
  -#include <stdexcept>
  +//#include <stdexcept>
   
   
   
  @@ -102,6 +102,14 @@
   
   XObject::~XObject()
   {
  +}
  +
  +
  +
  +XObject::eObjectType
  +XObject::getRealType() const
  +{
  +     return m_objectType;
   }
   
   
  
  
  
  1.14      +13 -0     xml-xalan/c/src/XPath/XObject.hpp
  
  Index: XObject.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XObject.hpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- XObject.hpp       2000/11/30 17:06:34     1.13
  +++ XObject.hpp       2000/12/21 04:43:49     1.14
  @@ -105,6 +105,11 @@
                                                  eTypeNodeSet = 5,
                                                  eTypeResultTreeFrag = 6,
                                                  eTypeUserDefined = 7,
  +                                               // These next types are 
implementation-specific, and
  +                                               // are never returned by 
getType().
  +                                               eTypeStringReference = 8,
  +                                               eTypeStringAdapter = 9,
  +                                               eTypeStringCached = 10,
                                                  eUnknown
                                                };
   
  @@ -320,6 +325,14 @@
        };
   
   protected:
  +
  +     /**
  +      * Tell what kind of class this is.
  +      *
  +      * @return numeric type value
  +      */
  +     virtual eObjectType
  +     getRealType() const;
   
        virtual void 
        referenced();
  
  
  
  1.16      +88 -51    xml-xalan/c/src/XPath/XObjectFactory.hpp
  
  Index: XObjectFactory.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XObjectFactory.hpp,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XObjectFactory.hpp        2000/11/21 21:08:25     1.15
  +++ XObjectFactory.hpp        2000/12/21 04:43:49     1.16
  @@ -10,33 +10,33 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *     notice, this list of conditions and the following disclaimer. 
    *
    * 2. Redistributions in binary form must reproduce the above copyright
  - *    notice, this list of conditions and the following disclaimer in
  - *    the documentation and/or other materials provided with the
  - *    distribution.
  + *     notice, this list of conditions and the following disclaimer in
  + *     the documentation and/or other materials provided with the
  + *     distribution.
    *
    * 3. The end-user documentation included with the redistribution,
  - *    if any, must include the following acknowledgment:  
  - *       "This product includes software developed by the
  - *        Apache Software Foundation (http://www.apache.org/)."
  - *    Alternately, this acknowledgment may appear in the software itself,
  - *    if and wherever such third-party acknowledgments normally appear.
  + *     if any, must include the following acknowledgment:  
  + *            "This product includes software developed by the
  + *             Apache Software Foundation (http://www.apache.org/)."
  + *     Alternately, this acknowledgment may appear in the software itself,
  + *     if and wherever such third-party acknowledgments normally appear.
    *
    * 4. The names "Xalan" and "Apache Software Foundation" must
  - *    not be used to endorse or promote products derived from this
  - *    software without prior written permission. For written 
  - *    permission, please contact [EMAIL PROTECTED]
  + *     not be used to endorse or promote products derived from this
  + *     software without prior written permission. For written 
  + *     permission, please contact [EMAIL PROTECTED]
    *
    * 5. Products derived from this software may not be called "Apache",
  - *    nor may "Apache" appear in their name, without prior written
  - *    permission of the Apache Software Foundation.
  + *     nor may "Apache" appear in their name, without prior written
  + *     permission of the Apache Software Foundation.
    *
    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  - * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  + * DISCLAIMED.       IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
    * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  @@ -92,7 +92,9 @@
   public:
   
        typedef XPathExecutionContext::BorrowReturnMutableNodeRefList   
BorrowReturnMutableNodeRefList;
  +     typedef XPathExecutionContext::GetAndReleaseCachedString                
GetAndReleaseCachedString;
   
  +
        XObjectFactory();
   
        virtual
  @@ -106,13 +108,13 @@
         * @return true if the object belongs to the factory, false if not.
         */
        bool
  -     returnObject(const XObject*             theXObject)
  +     returnObject(XObject*   theXObject)
        {
                return doReturnObject(theXObject);
        }
   
        /**
  -      * Reset the instance.  This invalidates all existing instances created
  +      * Reset the instance.  This invalidates all existing instances created
         * with this XObjectFactory.
         */
        virtual void
  @@ -121,27 +123,25 @@
        /**
         * Create a boolean XObject from a boolean value.
         * 
  -      * @param theValue  value used to create object  
  +      * @param theValue      value used to create object  
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createBoolean(
  -                     bool    theValue) = 0;
  +     createBoolean(bool      theValue) = 0;
   
        /**
         * Create a node set XObject from a node list.
         * 
  -      * @param theValue  value used to create object.  theValue will be 
owned by the new XObject.
  +      * @param theValue      value used to create object.  theValue will be 
owned by the new XObject.
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createNodeSet(
  -                     BorrowReturnMutableNodeRefList&         theValue) = 0;
  +     createNodeSet(BorrowReturnMutableNodeRefList&   theValue) = 0;
   
        /**
         * Create a null XObject.
         * 
  -      * @param theValue  value used to create object 
  +      * @param theValue      value used to create object 
         * @return pointer to new object
         */
        virtual const XObjectPtr
  @@ -150,74 +150,100 @@
        /**
         * Create a numeric XObject from a number.
         * 
  -      * @param theValue  value used to create object 
  +      * @param theValue      value used to create object 
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createNumber(
  -                     double  theValue) = 0;
  +     createNumber(double     theValue) = 0;
   
        /**
         * Create a string XObject from a string.
         * 
  -      * @param theValue  value used to create object  
  +      * @param theValue      value used to create object  
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createString(
  -                     const XalanDOMString&   theValue) = 0;
  +     createString(const XalanDOMString&      theValue) = 0;
   
        /**
         * Create a string XObject from a null-terminated array of characters.
         * 
  -      * @param theValue  a pointer to the array
  +      * @param theValue      a pointer to the array
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createString(
  -                     const XalanDOMChar*             theValue) = 0;
  +     createString(const XalanDOMChar*        theValue) = 0;
   
        /**
         * Create a string XObject from an array of characters.
         * 
  -      * @param theValue  a pointer to the array
  +      * @param theValue      a pointer to the array
         * @paran theLength the length of the array
         * @return pointer to new object
         */
        virtual const XObjectPtr
        createString(
  -                     const XalanDOMChar*             theValue,
  +                     const XalanDOMChar*     theValue,
                        unsigned int                    theLength) = 0;
   
        /**
  +      * Create a string XObject from a string.  The XObject
  +      * will hold a reference to the supplied string, so
  +      * the string must be in scope for the lifetime of
  +      * the instance
  +      *
  +      * @param theValue      value used to create object  
  +      * @return pointer to new object
  +      */
  +     virtual const XObjectPtr
  +     createStringReference(const XalanDOMString&             theValue) = 0;
  +
  +     /**
  +      * Create a string XObject that will adapt another XObject to
  +      * behave like a string.  The XObject holds a reference to the
  +      * other XObject.
  +      *
  +      * @param theValue      value used to create object  
  +      * @return pointer to new object
  +      */
  +     virtual const XObjectPtr
  +     createStringAdapter(const XObjectPtr&   theValue) = 0;
  +
  +     /**
  +      * Create a string XObject from a cached XalanDOMString,
  +      *
  +      * @param theValue      value used to create object  
  +      * @return pointer to new object
  +      */
  +     virtual const XObjectPtr
  +     createString(GetAndReleaseCachedString&         theValue) = 0;
  +
  +     /**
         * Create an "unknown" XObject from a string.
         * 
  -      * @param theValue  value used to create object  
  +      * @param theValue      value used to create object  
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createUnknown(
  -                     const XalanDOMString&   theValue) = 0;
  +     createUnknown(const XalanDOMString&     theValue) = 0;
   
        /**
         * Create a result tree fragment XObject from a result tree fragment.
         * 
  -      * @param theValue  value used to create object.  theValue will be 
owned by the new XObject.    
  +      * @param theValue      value used to create object.  theValue will be 
owned by the new XObject.        
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createResultTreeFrag(
  -                     ResultTreeFragBase*             theValue) = 0;
  +     createResultTreeFrag(ResultTreeFragBase*        theValue) = 0;
   
        /**
         * Create a span XObject from a node list.
         * 
  -      * @param theValue  value used to create object.  The new object will 
own the pointer.
  +      * @param theValue      value used to create object.  The new object 
will own the pointer.
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createSpan(
  -                     BorrowReturnMutableNodeRefList&         theValue) = 0;
  +     createSpan(BorrowReturnMutableNodeRefList&      theValue) = 0;
   
        /**
         *
  @@ -225,15 +251,15 @@
         *
         */
   #if defined(XALAN_NO_NAMESPACES)
  -     struct DeleteXObjectFunctor : public unary_function<const XObject*, 
void>
  +     struct DeleteXObjectFunctor : public unary_function<XObject*, void>
   #else
  -     struct DeleteXObjectFunctor : public std::unary_function<const 
XObject*, void>
  +     struct DeleteXObjectFunctor : public std::unary_function<XObject*, void>
   #endif
        {
        public:
   
                DeleteXObjectFunctor(
  -                     XObjectFactory&         theFactoryInstance,
  +                     XObjectFactory&         theFactoryInstance,
                        bool                            fInReset = false) :
                        m_factoryInstance(theFactoryInstance),
                        m_fInReset(fInReset)
  @@ -257,7 +283,7 @@
   
        private:
   
  -             XObjectFactory&         m_factoryInstance;
  +             XObjectFactory&         m_factoryInstance;
   
                const bool                      m_fInReset;
        };
  @@ -267,12 +293,23 @@
   protected:
   
        /**
  +      * Return the actual implementation type of an XObject.
  +      *
  +      * @param theXObject the XObject
  +      */
  +     XObject::eObjectType
  +     getRealType(const XObject&      theXObject) const
  +     {
  +             return theXObject.getRealType();
  +     }
  +
  +     /**
         * Delete a FactoryObject instance.
         *
         * @param theXObject the XObject instance to delete.
         */
        void
  -     deleteObject(const XObject*             theXObject) const
  +     deleteObject(const XObject*     theXObject) const
        {
   #if defined(XALAN_CANNOT_DELETE_CONST)
                delete (XObject*)theXObject;
  @@ -290,8 +327,8 @@
   
        virtual bool
        doReturnObject(
  -                     const XObject*  theXObject,
  -                     bool                    fInReset = false) = 0;
  +                     XObject*        theXObject,
  +                     bool            fInReset = false) = 0;
   
   private:
   
  
  
  
  1.18      +111 -111  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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XObjectFactoryDefault.cpp 2000/11/21 21:08:27     1.17
  +++ XObjectFactoryDefault.cpp 2000/12/21 04:43:49     1.18
  @@ -71,6 +71,9 @@
   #include "XResultTreeFrag.hpp"
   #include "XSpan.hpp"
   #include "XString.hpp"
  +#include "XStringAdapter.hpp"
  +#include "XStringCached.hpp"
  +#include "XStringReference.hpp"
   #include "XUnknown.hpp"
   
   
  @@ -81,17 +84,20 @@
   
   
   XObjectFactoryDefault::XObjectFactoryDefault(
  -                     unsigned int            theXStringBlockSize,
  -                     unsigned int            theXNumberBlockSize,
  -                     unsigned int            theXNodeSetBlockSize,
  -                     unsigned int            theXResultTreeFragBlockSize) :  
  +                     unsigned int    theXStringBlockSize,
  +                     unsigned int    theXNumberBlockSize,
  +                     unsigned int    theXNodeSetBlockSize,
  +                     unsigned int    theXResultTreeFragBlockSize) :  
        XObjectFactory(),
  -     m_xobjects(),
  -     m_XNull(new XNull),
  +     m_xstringAdapterAllocator(theXStringBlockSize),
        m_xstringAllocator(theXStringBlockSize),
  +     m_xstringCachedAllocator(theXStringBlockSize),
  +     m_xstringReferenceAllocator(theXStringBlockSize),
        m_xnumberAllocator(theXNumberBlockSize),
        m_xnodesetAllocator(theXNodeSetBlockSize),
  -     m_xresultTreeFragAllocator(theXResultTreeFragBlockSize)
  +     m_xresultTreeFragAllocator(theXResultTreeFragBlockSize),
  +     m_xobjects(),
  +     m_XNull(new XNull)
   {
   }
   
  @@ -106,14 +112,14 @@
   
   bool
   XObjectFactoryDefault::doReturnObject(
  -                     const XObject*  theXObject,
  -                     bool                    fInReset)
  +                     XObject*        theXObject,
  +                     bool            fInReset)
   {
        assert(theXObject != 0);
   
        bool bStatus = false;   
   
  -     const XObject::eObjectType      theType = theXObject->getType();
  +     const XObject::eObjectType      theType = getRealType(*theXObject);
   
        switch(theType)
        {
  @@ -123,26 +129,65 @@
                        bStatus = true;
                }
   
  +     case XObject::eTypeStringAdapter:
  +             {
  +                     XStringAdapter* const           theXStringAdapter =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (XStringAdapter*)theXObject;
  +#else
  +                             static_cast<XStringAdapter*>(theXObject);
  +#endif
  +
  +                     bStatus = 
m_xstringAdapterAllocator.destroy(theXStringAdapter);
  +             }
  +             break;
  +
        case XObject::eTypeString:
                {
                        XString* const  theXString =
   #if defined(XALAN_OLD_STYLE_CASTS)
                                (XString*)theXObject;
   #else
  -                             
static_cast<XString*>(const_cast<XObject*>(theXObject));
  +                             static_cast<XString*>(theXObject);
   #endif
   
                        bStatus = m_xstringAllocator.destroy(theXString);
                }
                break;
   
  +     case XObject::eTypeStringCached:
  +             {
  +                     XStringCached* const    theXStringCached =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (XStringCached*)theXObject;
  +#else
  +                             static_cast<XStringCached*>(theXObject);
  +#endif
  +
  +                     bStatus = 
m_xstringCachedAllocator.destroy(theXStringCached);
  +             }
  +             break;
  +
  +     case XObject::eTypeStringReference:
  +             {
  +                     XStringReference* const         theXStringReference =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (XStringReference*)theXObject;
  +#else
  +                             static_cast<XStringReference*>(theXObject);
  +#endif
  +
  +                     bStatus = 
m_xstringReferenceAllocator.destroy(theXStringReference);
  +             }
  +             break;
  +
        case  XObject::eTypeNumber:
                {
                        XNumber* const  theXNumber =
   #if defined(XALAN_OLD_STYLE_CASTS)
                                (XNumber*)theXObject;
   #else
  -                             
static_cast<XNumber*>(const_cast<XObject*>(theXObject));
  +                             static_cast<XNumber*>(theXObject);
   #endif
   
                        bStatus = m_xnumberAllocator.destroy(theXNumber);
  @@ -155,7 +200,7 @@
   #if defined(XALAN_OLD_STYLE_CASTS)
                                (XNodeSet*)theXObject;
   #else
  -                             
static_cast<XNodeSet*>(const_cast<XObject*>(theXObject));
  +                             static_cast<XNodeSet*>(theXObject);
   #endif
   
                        bStatus = m_xnodesetAllocator.destroy(theXNodeSet);
  @@ -164,11 +209,11 @@
   
        case XObject::eTypeResultTreeFrag:      
                {
  -                     XResultTreeFrag* const  theXResultTreeFrag =    
  +                     XResultTreeFrag* const  theXResultTreeFrag =
   #if defined(XALAN_OLD_STYLE_CASTS)
                                (XResultTreeFrag*)theXObject;
   #else
  -                             
static_cast<XResultTreeFrag*>(const_cast<XObject*>(theXObject));        
  +                             static_cast<XResultTreeFrag*>(theXObject);
   #endif
   
                        bStatus = 
m_xresultTreeFragAllocator.destroy(theXResultTreeFrag);
  @@ -201,84 +246,6 @@
   
   
   const XObjectPtr
  -XObjectFactoryDefault::clone(const XObject&          theXObject)
  -{
  -     XObject*        theClone = 0;
  -
  -     if (&theXObject == &theTrueBoolean)
  -     {
  -             theClone = &theTrueBoolean;
  -     }
  -     else if (&theXObject == &theFalseBoolean)
  -     {
  -             theClone = &theFalseBoolean;
  -     }
  -     else if (&theXObject == m_XNull.get())
  -     {
  -             theClone = m_XNull.get();
  -     }
  -     else
  -     {
  -             const XObject::eObjectType      theType = theXObject.getType(); 
        
  -
  -             switch(theType)
  -             {       
  -             case XObject::eTypeString:
  -                     theClone = m_xstringAllocator.clone(
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -                     (const XString&)theXObject);
  -#else                        
  -                     static_cast<const XString&>(theXObject));
  -#endif
  -
  -                     break;
  -
  -             case  XObject::eTypeNumber:
  -                     theClone = m_xnumberAllocator.clone(
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -                     (const XNumber&)theXObject);
  -#else                        
  -                     static_cast<const XNumber&>(theXObject));
  -#endif
  -
  -                     break;
  -
  -             case XObject::eTypeNodeSet:
  -                     theClone = m_xnodesetAllocator.clone(
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -                     (const XNodeSet&)theXObject);
  -#else                        
  -                     static_cast<const XNodeSet&>(theXObject));
  -#endif
  -
  -                     break;
  -
  -             case XObject::eTypeResultTreeFrag:
  -                     theClone = m_xresultTreeFragAllocator.clone(
  -#if defined(XALAN_OLD_STYLE_CASTS)
  -                     (const XResultTreeFrag&)theXObject);
  -#else                        
  -                     static_cast<const XResultTreeFrag&>(theXObject));
  -#endif
  -
  -                     break;
  -
  -             default:
  -                     theClone = theXObject.clone();
  -
  -                     m_xobjects.insert(theClone);
  -                     break;
  -             }
  -     }
  -
  -     theClone->setFactory(this);
  -
  -     return XObjectPtr(theClone);
  -}
  -
  -
  -
  -const XObjectPtr
   XObjectFactoryDefault::createBoolean(
                        bool    theValue)
   {
  @@ -296,8 +263,7 @@
   
   
   const XObjectPtr
  -XObjectFactoryDefault::createUnknown(
  -                     const XalanDOMString&   theValue)
  +XObjectFactoryDefault::createUnknown(const XalanDOMString&   theValue)
   {
        XUnknown* const theXUnknown = new XUnknown(theValue);
   
  @@ -311,8 +277,7 @@
   
   
   const XObjectPtr
  -XObjectFactoryDefault::createSpan(
  -                     BorrowReturnMutableNodeRefList&         theValue)
  +XObjectFactoryDefault::createSpan(BorrowReturnMutableNodeRefList&    
theValue)
   {
        XSpan* const    theXSpan = new XSpan(theValue);
   
  @@ -326,8 +291,7 @@
   
   
   const XObjectPtr
  -XObjectFactoryDefault::createNumber(
  -                     double  theValue)
  +XObjectFactoryDefault::createNumber(double   theValue)
   {
        XNumber*        theXNumber = m_xnumberAllocator.createNumber(theValue);
   
  @@ -339,8 +303,7 @@
   
   
   const XObjectPtr
  -XObjectFactoryDefault::createNodeSet(
  -                     BorrowReturnMutableNodeRefList&         theValue)
  +XObjectFactoryDefault::createNodeSet(BorrowReturnMutableNodeRefList& 
theValue)
   {
        XNodeSet* const         theXNodeSet = 
m_xnodesetAllocator.createNodeSet(theValue);
   
  @@ -352,8 +315,7 @@
   
   
   const XObjectPtr
  -XObjectFactoryDefault::createString(
  -                     const XalanDOMString&   theValue)
  +XObjectFactoryDefault::createString(const XalanDOMString&    theValue)
   {
        XString* const  theXString = m_xstringAllocator.createString(theValue);
   
  @@ -365,8 +327,7 @@
   
   
   const XObjectPtr
  -XObjectFactoryDefault::createString(
  -                     const XalanDOMChar*             theValue)
  +XObjectFactoryDefault::createString(const XalanDOMChar*              
theValue)
   {
        XString* const  theXString = m_xstringAllocator.createString(theValue);
   
  @@ -391,9 +352,44 @@
   
   
   
  +const XObjectPtr
  +XObjectFactoryDefault::createStringReference(const XalanDOMString&   
theValue)
  +{
  +     XStringReference* const theXStringReference = 
m_xstringReferenceAllocator.createString(theValue);
  +
  +     theXStringReference->setFactory(this);
  +
  +     return XObjectPtr(theXStringReference);
  +}
  +
  +
  +
  +const XObjectPtr
  +XObjectFactoryDefault::createStringAdapter(const XObjectPtr& theValue)
  +{
  +     XStringAdapter* const   theXStringAdapter = 
m_xstringAdapterAllocator.createString(theValue);
  +
  +     theXStringAdapter->setFactory(this);
  +
  +     return XObjectPtr(theXStringAdapter);
  +}
  +
  +
  +
  +const XObjectPtr
  +XObjectFactoryDefault::createString(GetAndReleaseCachedString&       
theValue)
  +{
  +     XStringCached* const    theXStringCached = 
m_xstringCachedAllocator.createString(theValue);
  +
  +     theXStringCached->setFactory(this);
  +
  +     return XObjectPtr(theXStringCached);
  +}
  +
  +
  +
   const XObjectPtr
  -XObjectFactoryDefault::createResultTreeFrag(
  -                     ResultTreeFragBase*             theValue)
  +XObjectFactoryDefault::createResultTreeFrag(ResultTreeFragBase*              
theValue)
   {
        XResultTreeFrag* const  theResultTreeFrag =  
m_xresultTreeFragAllocator.create(theValue);
   
  @@ -407,17 +403,21 @@
   void
   XObjectFactoryDefault::reset()
   {
  -#if !defined(XALAN_NO_NAMESPACES)
  -     using std::for_each;
  -#endif
  +     m_xstringAdapterAllocator.reset();
   
        m_xstringAllocator.reset();
  -         
  +
  +     m_xstringReferenceAllocator.reset();
  +
        m_xnumberAllocator.reset();
   
        m_xnodesetAllocator.reset();
   
        m_xresultTreeFragAllocator.reset();
  +
  +#if !defined(XALAN_NO_NAMESPACES)
  +     using std::for_each;
  +#endif
   
        for_each(m_xobjects.begin(),
                         m_xobjects.end(),
  
  
  
  1.17      +37 -26    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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- XObjectFactoryDefault.hpp 2000/11/21 21:08:27     1.16
  +++ XObjectFactoryDefault.hpp 2000/12/21 04:43:49     1.17
  @@ -73,9 +73,12 @@
   
   
   
  -#include <XPath/XStringAllocator.hpp>
  -#include <XPath/XNumberAllocator.hpp>
   #include <XPath/XNodeSetAllocator.hpp>
  +#include <XPath/XNumberAllocator.hpp>
  +#include <XPath/XStringAllocator.hpp>
  +#include <XPath/XStringAdapterAllocator.hpp>
  +#include <XPath/XStringCachedAllocator.hpp>
  +#include <XPath/XStringReferenceAllocator.hpp>
   #include <XPath/XResultTreeFragAllocator.hpp>
   
   
  @@ -132,31 +135,23 @@
        virtual void
        reset();
   
  -     virtual const XObjectPtr
  -     clone(const XObject&    theXObject);
  -
        virtual const XObjectPtr
  -     createBoolean(
  -                     bool    theValue);
  +     createBoolean(bool      theValue);
   
        virtual const XObjectPtr
  -     createNodeSet(
  -                     BorrowReturnMutableNodeRefList&         theValue);
  +     createNodeSet(BorrowReturnMutableNodeRefList&   theValue);
   
        virtual const XObjectPtr
        createNull();
   
        virtual const XObjectPtr
  -     createNumber(
  -                     double  theValue);
  +     createNumber(double             theValue);
   
        virtual const XObjectPtr
  -     createString(
  -                     const XalanDOMString&   theValue);
  +     createString(const XalanDOMString&      theValue);
   
        virtual const XObjectPtr
  -     createString(
  -                     const XalanDOMChar*             theValue);
  +     createString(const XalanDOMChar*        theValue);
   
        virtual const XObjectPtr
        createString(
  @@ -164,29 +159,36 @@
                        unsigned int                    theLength);
   
        virtual const XObjectPtr
  +     createStringReference(const XalanDOMString&             theValue);
  +
  +     virtual const XObjectPtr
  +     createStringAdapter(const XObjectPtr&   theValue);
  +
  +     virtual const XObjectPtr
  +     createString(GetAndReleaseCachedString&         theValue);
  +
  +     virtual const XObjectPtr
        createUnknown(
                        const XalanDOMString&   theValue);
   
        virtual const XObjectPtr
  -     createResultTreeFrag(
  -                     ResultTreeFragBase*             theValue);
  +     createResultTreeFrag(ResultTreeFragBase*        theValue);
   
        virtual const XObjectPtr
  -     createSpan(
  -                     BorrowReturnMutableNodeRefList&         theValue);
  +     createSpan(BorrowReturnMutableNodeRefList&      theValue);
   
   #if defined(XALAN_NO_NAMESPACES)
  -     typedef set<const XObject*, less<const XObject*> >      CollectionType;
  +     typedef set<XObject*, less<XObject*> >  CollectionType;
   #else
  -     typedef std::set<const XObject*>        CollectionType;
  +     typedef std::set<XObject*>                              CollectionType;
   #endif
   
   protected:
   
        virtual bool
        doReturnObject(
  -                     const XObject*  theXObject,
  -                     bool                    fInReset = false);
  +                     XObject*        theXObject,
  +                     bool            fInReset = false);
   
   private:
   
  @@ -201,17 +203,26 @@
   
   
        // Data members...
  -     CollectionType                          m_xobjects;
   
  -     const XalanAutoPtr<XNull>       m_XNull;
  +     // This one's first, since it may be be holding references
  +     // to objects in other allocators.
  +     XStringAdapterAllocator         m_xstringAdapterAllocator;
   
        XStringAllocator                        m_xstringAllocator;
  -         
  +
  +     XStringCachedAllocator          m_xstringCachedAllocator;
  +
  +     XStringReferenceAllocator       m_xstringReferenceAllocator;
  +
        XNumberAllocator                        m_xnumberAllocator;
   
        XNodeSetAllocator                       m_xnodesetAllocator;
   
        XResultTreeFragAllocator        m_xresultTreeFragAllocator;
  +
  +     CollectionType                          m_xobjects;
  +
  +     const XalanAutoPtr<XNull>       m_XNull;
   };
   
   
  
  
  

Reply via email to