dbertoni    01/01/15 18:34:49

  Modified:    c/src/XPath XNumber.cpp XNumber.hpp XObject.hpp
                        XObjectFactory.hpp XObjectFactoryDefault.cpp
                        XObjectFactoryDefault.hpp XPath.cpp
                        XPathExecutionContext.hpp
                        XPathExecutionContextDefault.cpp
                        XPathExecutionContextDefault.hpp
                        XPathExpression.cpp XPathExpression.hpp
  Added:       c/src/XPath XNumberBase.cpp XNumberBase.hpp XToken.cpp
                        XToken.hpp XTokenNumberAdapter.cpp
                        XTokenNumberAdapter.hpp
                        XTokenNumberAdapterAllocator.cpp
                        XTokenNumberAdapterAllocator.hpp
                        XTokenStringAdapter.cpp XTokenStringAdapter.hpp
                        XTokenStringAdapterAllocator.cpp
                        XTokenStringAdapterAllocator.hpp
  Log:
  Moved XToken to a separate file.  Made changes to allow adapters for XTokens, 
which reduces creation of XStrings and XNumbers.
  
  Revision  Changes    Path
  1.12      +5 -34     xml-xalan/c/src/XPath/XNumber.cpp
  
  Index: XNumber.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XNumber.cpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XNumber.cpp       2000/12/01 21:41:55     1.11
  +++ XNumber.cpp       2001/01/16 02:34:45     1.12
  @@ -60,16 +60,11 @@
   
   
   #include <PlatformSupport/DOMStringHelper.hpp>
  -#include <PlatformSupport/DoubleSupport.hpp>
   
   
   
  -#include "XObjectTypeCallback.hpp"
  -
  -
  -
   XNumber::XNumber(double              val) :
  -     XObject(eTypeNumber),
  +     XNumberBase(),
        m_value(val),
        m_cachedStringValue()
   {
  @@ -78,7 +73,7 @@
   
   
   XNumber::XNumber(const XNumber&              source) :
  -     XObject(source),
  +     XNumberBase(source),
        m_value(source.m_value),
        m_cachedStringValue(source.m_cachedStringValue)
   {
  @@ -104,14 +99,6 @@
   
   
   
  -XalanDOMString
  -XNumber::getTypeString() const
  -{
  -     return XALAN_STATIC_UCODE_STRING("#NUMBER");
  -}
  -
  -
  -
   double
   XNumber::num() const
   {
  @@ -120,14 +107,6 @@
   
   
   
  -bool
  -XNumber::boolean() const
  -{
  -     return DoubleSupport::isNaN(m_value) || DoubleSupport::equal(m_value, 
0.0) ? false : true;
  -}
  -
  -
  -
   const XalanDOMString&
   XNumber::str() const
   {
  @@ -146,17 +125,9 @@
   
   
   void
  -XNumber::ProcessXObjectTypeCallback(XObjectTypeCallback&     
theCallbackObject)
  +XNumber::set(double          theValue)
   {
  -     theCallbackObject.Number(*this,
  -                                                      num());
  -}
  +     m_value = theValue;
   
  -
  -
  -void
  -XNumber::ProcessXObjectTypeCallback(XObjectTypeCallback&     
theCallbackObject) const
  -{
  -     theCallbackObject.Number(*this,
  -                                                      num());
  +     clear(m_cachedStringValue);
   }
  
  
  
  1.11      +11 -13    xml-xalan/c/src/XPath/XNumber.hpp
  
  Index: XNumber.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XNumber.hpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XNumber.hpp       2000/09/19 14:56:06     1.10
  +++ XNumber.hpp       2001/01/16 02:34:45     1.11
  @@ -69,18 +69,18 @@
   
   
   // Base class header file.
  -#include <XPath/XObject.hpp>
  +#include <XPath/XNumberBase.hpp>
   
   
   
  -class XALAN_XPATH_EXPORT XNumber : public XObject
  +class XALAN_XPATH_EXPORT XNumber : public XNumberBase
   {
   public:
   
        /**
         * Create an XNumber from a number.
         *
  -      * @param val        numeric value to use
  +      * @param val numeric value to use
         */
        XNumber(double  val);
   
  @@ -98,23 +98,21 @@
   #endif
        clone(void*             theAddress = 0) const;
   
  -     virtual XalanDOMString
  -     getTypeString() const;
  -
        virtual double
        num() const;
   
  -     virtual bool
  -     boolean() const;
  -
        virtual const XalanDOMString&
        str() const;
   
  -     virtual void
  -     ProcessXObjectTypeCallback(XObjectTypeCallback&         
theCallbackObject);
  +     // These methods are new to XNumber...
   
  -     virtual void
  -     ProcessXObjectTypeCallback(XObjectTypeCallback&         
theCallbackObject) const;
  +     /**
  +      * Change the value of an XNumber
  +      *
  +      * @param theValue The new value.
  +      */
  +     void
  +     set(double      theValue);
   
   private:
   
  
  
  
  1.16      +2 -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.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XObject.hpp       2001/01/03 19:32:39     1.15
  +++ XObject.hpp       2001/01/16 02:34:45     1.16
  @@ -110,6 +110,8 @@
                                                  eTypeStringReference = 8,
                                                  eTypeStringAdapter = 9,
                                                  eTypeStringCached = 10,
  +                                               eTypeXTokenNumberAdapter = 11,
  +                                               eTypeXTokenStringAdapter = 12,
                                                  eUnknown
                                                };
   
  
  
  
  1.17      +25 -1     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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- XObjectFactory.hpp        2000/12/21 04:43:49     1.16
  +++ XObjectFactory.hpp        2001/01/16 02:34:45     1.17
  @@ -81,6 +81,7 @@
   class ResultTreeFragBase;
   class XObject;
   class XObjectPtr;
  +class XToken;
   
   
   
  @@ -92,6 +93,7 @@
   public:
   
        typedef XPathExecutionContext::BorrowReturnMutableNodeRefList   
BorrowReturnMutableNodeRefList;
  +     typedef XPathExecutionContext::BorrowReturnResultTreeFrag               
BorrowReturnResultTreeFrag;
        typedef XPathExecutionContext::GetAndReleaseCachedString                
GetAndReleaseCachedString;
   
   
  @@ -157,6 +159,17 @@
        createNumber(double     theValue) = 0;
   
        /**
  +      * Create a numeric XObject from an XToken.  The XToken
  +      * instance must be inexistence for the lifetime of the
  +      * object.
  +      *
  +      * @param theValue      value used to create object 
  +      * @return pointer to new object
  +      */
  +     virtual const XObjectPtr
  +     createNumber(const XToken&      theValue) = 0;
  +
  +     /**
         * Create a string XObject from a string.
         * 
         * @param theValue      value used to create object  
  @@ -187,6 +200,17 @@
                        unsigned int                    theLength) = 0;
   
        /**
  +      * Create a string XObject from an XToken.  The XToken
  +      * instance must be inexistence for the lifetime of the
  +      * object.
  +      *
  +      * @param theValue      value used to create object 
  +      * @return pointer to new object
  +      */
  +     virtual const XObjectPtr
  +     createString(const XToken&      theValue) = 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
  @@ -234,7 +258,7 @@
         * @return pointer to new object
         */
        virtual const XObjectPtr
  -     createResultTreeFrag(ResultTreeFragBase*        theValue) = 0;
  +     createResultTreeFrag(BorrowReturnResultTreeFrag&        theValue) = 0;
   
        /**
         * Create a span XObject from a node list.
  
  
  
  1.19      +88 -9     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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- XObjectFactoryDefault.cpp 2000/12/21 04:43:49     1.18
  +++ XObjectFactoryDefault.cpp 2001/01/16 02:34:45     1.19
  @@ -96,7 +96,10 @@
        m_xnumberAllocator(theXNumberBlockSize),
        m_xnodesetAllocator(theXNodeSetBlockSize),
        m_xresultTreeFragAllocator(theXResultTreeFragBlockSize),
  +     m_xtokenNumberAdapterAllocator(theXNumberBlockSize),
  +     m_xtokenStringAdapterAllocator(theXStringBlockSize),
        m_xobjects(),
  +     m_xnumberCache(),
        m_XNull(new XNull)
   {
   }
  @@ -142,6 +145,32 @@
                }
                break;
   
  +     case XObject::eTypeXTokenNumberAdapter:
  +             {
  +                     XTokenNumberAdapter* const      theAdapter =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (XTokenNumberAdapter*)theXObject;
  +#else
  +                             static_cast<XTokenNumberAdapter*>(theXObject);
  +#endif
  +
  +                     bStatus = 
m_xtokenNumberAdapterAllocator.destroy(theAdapter);
  +             }
  +             break;
  +
  +     case XObject::eTypeXTokenStringAdapter:
  +             {
  +                     XTokenStringAdapter* const      theAdapter =
  +#if defined(XALAN_OLD_STYLE_CASTS)
  +                             (XTokenStringAdapter*)theXObject;
  +#else
  +                             static_cast<XTokenStringAdapter*>(theXObject);
  +#endif
  +
  +                     bStatus = 
m_xtokenStringAdapterAllocator.destroy(theAdapter);
  +             }
  +             break;
  +
        case XObject::eTypeString:
                {
                        XString* const  theXString =
  @@ -189,8 +218,17 @@
   #else
                                static_cast<XNumber*>(theXObject);
   #endif
  +
  +                     if (m_xnumberCache.size() < eXNumberCacheMax)
  +                     {
  +                             m_xnumberCache.push_back(theXNumber);
   
  -                     bStatus = m_xnumberAllocator.destroy(theXNumber);
  +                             bStatus = true;
  +                     }
  +                     else
  +                     {
  +                             bStatus = 
m_xnumberAllocator.destroy(theXNumber);
  +                     }
                }
                break;
   
  @@ -279,13 +317,13 @@
   const XObjectPtr
   XObjectFactoryDefault::createSpan(BorrowReturnMutableNodeRefList&    
theValue)
   {
  -     XSpan* const    theXSpan = new XSpan(theValue);
  +     XSpan* const    theXObject = new XSpan(theValue);
   
  -     m_xobjects.insert(theXSpan);
  +     m_xobjects.insert(theXObject);
   
  -     theXSpan->setFactory(this);
  +     theXObject->setFactory(this);
   
  -     return XObjectPtr(theXSpan);
  +     return XObjectPtr(theXObject);
   }
   
   
  @@ -293,16 +331,43 @@
   const XObjectPtr
   XObjectFactoryDefault::createNumber(double   theValue)
   {
  -     XNumber*        theXNumber = m_xnumberAllocator.createNumber(theValue);
  +     if (m_xnumberCache.size() > 0)
  +     {
  +             XNumber* const  theXNumber = m_xnumberCache.back();
  +
  +             m_xnumberCache.pop_back();
   
  -     theXNumber->setFactory(this);
  +             theXNumber->set(theValue);
   
  -     return XObjectPtr(theXNumber);
  +             return XObjectPtr(theXNumber);
  +     }
  +     else
  +     {
  +             m_xnumberCache.reserve(eXNumberCacheMax);
  +
  +             XObject* const  theXObject = 
m_xnumberAllocator.createNumber(theValue);
  +
  +             theXObject->setFactory(this);
  +
  +             return XObjectPtr(theXObject);
  +     }
   }
   
   
   
   const XObjectPtr
  +XObjectFactoryDefault::createNumber(const XToken&    theValue)
  +{
  +     XObject*        theXObject = 
m_xtokenNumberAdapterAllocator.create(theValue);
  +
  +     theXObject->setFactory(this);
  +
  +     return XObjectPtr(theXObject);
  +}
  +
  +
  +
  +const XObjectPtr
   XObjectFactoryDefault::createNodeSet(BorrowReturnMutableNodeRefList& 
theValue)
   {
        XNodeSet* const         theXNodeSet = 
m_xnodesetAllocator.createNodeSet(theValue);
  @@ -353,6 +418,18 @@
   
   
   const XObjectPtr
  +XObjectFactoryDefault::createString(const XToken&    theValue)
  +{
  +     XObject*        theXObject = 
m_xtokenStringAdapterAllocator.create(theValue);
  +
  +     theXObject->setFactory(this);
  +
  +     return XObjectPtr(theXObject);
  +}
  +
  +
  +
  +const XObjectPtr
   XObjectFactoryDefault::createStringReference(const XalanDOMString&   
theValue)
   {
        XStringReference* const theXStringReference = 
m_xstringReferenceAllocator.createString(theValue);
  @@ -389,7 +466,7 @@
   
   
   const XObjectPtr
  -XObjectFactoryDefault::createResultTreeFrag(ResultTreeFragBase*              
theValue)
  +XObjectFactoryDefault::createResultTreeFrag(BorrowReturnResultTreeFrag&      
        theValue)
   {
        XResultTreeFrag* const  theResultTreeFrag =  
m_xresultTreeFragAllocator.create(theValue);
   
  @@ -424,4 +501,6 @@
                         DeleteXObjectFunctor(*this, true));
   
        m_xobjects.clear();
  +
  +     m_xnumberCache.clear();
   }
  
  
  
  1.18      +33 -13    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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XObjectFactoryDefault.hpp 2000/12/21 04:43:49     1.17
  +++ XObjectFactoryDefault.hpp 2001/01/16 02:34:45     1.18
  @@ -65,6 +65,7 @@
   
   
   #include <set>
  +#include <vector>
   
   
   
  @@ -75,11 +76,13 @@
   
   #include <XPath/XNodeSetAllocator.hpp>
   #include <XPath/XNumberAllocator.hpp>
  +#include <XPath/XResultTreeFragAllocator.hpp>
   #include <XPath/XStringAllocator.hpp>
   #include <XPath/XStringAdapterAllocator.hpp>
   #include <XPath/XStringCachedAllocator.hpp>
   #include <XPath/XStringReferenceAllocator.hpp>
  -#include <XPath/XResultTreeFragAllocator.hpp>
  +#include <XPath/XTokenNumberAdapterAllocator.hpp>
  +#include <XPath/XTokenStringAdapterAllocator.hpp>
   
   
   
  @@ -94,6 +97,7 @@
   
   
   class XNull;
  +class XNumber;
   
   
   
  @@ -148,6 +152,9 @@
        createNumber(double             theValue);
   
        virtual const XObjectPtr
  +     createNumber(const XToken&      theValue);
  +
  +     virtual const XObjectPtr
        createString(const XalanDOMString&      theValue);
   
        virtual const XObjectPtr
  @@ -159,6 +166,9 @@
                        unsigned int                    theLength);
   
        virtual const XObjectPtr
  +     createString(const XToken&      theValue);
  +
  +     virtual const XObjectPtr
        createStringReference(const XalanDOMString&             theValue);
   
        virtual const XObjectPtr
  @@ -172,15 +182,17 @@
                        const XalanDOMString&   theValue);
   
        virtual const XObjectPtr
  -     createResultTreeFrag(ResultTreeFragBase*        theValue);
  +     createResultTreeFrag(BorrowReturnResultTreeFrag&        theValue);
   
        virtual const XObjectPtr
        createSpan(BorrowReturnMutableNodeRefList&      theValue);
   
   #if defined(XALAN_NO_NAMESPACES)
  -     typedef set<XObject*, less<XObject*> >  CollectionType;
  +     typedef set<XObject*, less<XObject*> >          CollectionType;
  +     typedef vector<XNumber*>, less<XNumber*> >      XNumberCacheType;
   #else
  -     typedef std::set<XObject*>                              CollectionType;
  +     typedef std::set<XObject*>                                      
CollectionType;
  +     typedef std::vector<XNumber*>                           
XNumberCacheType;
   #endif
   
   protected:
  @@ -192,6 +204,8 @@
   
   private:
   
  +     enum { eXNumberCacheMax = 40 };
  +
        // Not implemented...
        XObjectFactoryDefault(const XObjectFactoryDefault&);
   
  @@ -206,23 +220,29 @@
   
        // This one's first, since it may be be holding references
        // to objects in other allocators.
  -     XStringAdapterAllocator         m_xstringAdapterAllocator;
  +     XStringAdapterAllocator                 m_xstringAdapterAllocator;
  +
  +     XStringAllocator                                m_xstringAllocator;
  +
  +     XStringCachedAllocator                  m_xstringCachedAllocator;
  +
  +     XStringReferenceAllocator               m_xstringReferenceAllocator;
   
  -     XStringAllocator                        m_xstringAllocator;
  +     XNumberAllocator                                m_xnumberAllocator;
   
  -     XStringCachedAllocator          m_xstringCachedAllocator;
  +     XNodeSetAllocator                               m_xnodesetAllocator;
   
  -     XStringReferenceAllocator       m_xstringReferenceAllocator;
  +     XResultTreeFragAllocator                m_xresultTreeFragAllocator;
   
  -     XNumberAllocator                        m_xnumberAllocator;
  +     XTokenNumberAdapterAllocator    m_xtokenNumberAdapterAllocator;
   
  -     XNodeSetAllocator                       m_xnodesetAllocator;
  +     XTokenStringAdapterAllocator    m_xtokenStringAdapterAllocator;
   
  -     XResultTreeFragAllocator        m_xresultTreeFragAllocator;
  +     CollectionType                                  m_xobjects;
   
  -     CollectionType                          m_xobjects;
  +     XNumberCacheType                                m_xnumberCache;
   
  -     const XalanAutoPtr<XNull>       m_XNull;
  +     const XalanAutoPtr<XNull>               m_XNull;
   };
   
   
  
  
  
  1.40      +9 -47     xml-xalan/c/src/XPath/XPath.cpp
  
  Index: XPath.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPath.cpp,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- XPath.cpp 2001/01/08 18:28:24     1.39
  +++ XPath.cpp 2001/01/16 02:34:46     1.40
  @@ -992,7 +992,7 @@
        }
        else
        {
  -             return 
executionContext.getXObjectFactory().createString(expr1->str());
  +             return 
executionContext.getXObjectFactory().createStringAdapter(expr1);
        }
   }
   
  @@ -1004,7 +1004,7 @@
                        int                                             opPos,
                        XPathExecutionContext&  executionContext) const
   {
  -     XObjectPtr      expr1(executeMore(context, opPos + 2, 
executionContext));
  +     const XObjectPtr        expr1(executeMore(context, opPos + 2, 
executionContext));
        assert(expr1.get() != 0);
   
        // Try to optimize when the result of the execution is
  @@ -1027,7 +1027,7 @@
                        int                                             opPos,
                        XPathExecutionContext&  executionContext) const
   {
  -     XObjectPtr      expr1(executeMore(context, opPos + 2, 
executionContext));
  +     const XObjectPtr        expr1(executeMore(context, opPos + 2, 
executionContext));
        assert(expr1.get() != 0);
   
        // Try to optimize when the result of the execution is
  @@ -1085,9 +1085,9 @@
        assert(m_expression.m_opMap.size() > unsigned(opPos + 2));
        assert(m_expression.m_tokenQueue.size() > 
unsigned(m_expression.m_opMap[opPos + 2]));
   
  -     const XObject&  theLiteral = 
m_expression.m_tokenQueue[m_expression.m_opMap[opPos + 2]];
  +     const XToken&   theLiteral = 
m_expression.m_tokenQueue[m_expression.m_opMap[opPos + 2]];
   
  -     return 
executionContext.getXObjectFactory().createString(theLiteral.str());
  +     return executionContext.getXObjectFactory().createString(theLiteral);
   }
   
   
  @@ -1146,13 +1146,13 @@
        assert(m_expression.m_opMap.size() > unsigned(opPos + 2));
        assert(m_expression.m_tokenQueue.size() > 
unsigned(m_expression.m_opMap[opPos + 2]));
   
  -     const XObject&  theLiteral = 
m_expression.m_tokenQueue[m_expression.m_opMap[opPos + 2]];
  +     const XToken&   theLiteral = 
m_expression.m_tokenQueue[m_expression.m_opMap[opPos + 2]];
   
  -     return 
executionContext.getXObjectFactory().createNumber(theLiteral.num());
  +     return executionContext.getXObjectFactory().createNumber(theLiteral);
   }
  -  
   
   
  +
   const XObjectPtr
   XPath::arg(
                        XalanNode*                              context,
  @@ -1172,33 +1172,6 @@
   {    
        assert(context != 0);
   
  -/*
  -     const int       stepType = m_expression.m_opMap[opPos + 2];
  -
  -     XLocator xlocator = null;
  -     if(OP_VARIABLE == stepType)
  -     {
  -       // Bit of a hack here...
  -       XObject obj = execute(context, opPos+2);
  -       NodeList nl = obj.nodeset();
  -       if(nl.getLength() > 0)
  -       {
  -             // Use the xlocator of the first node...
  -             // I guess we should really loop through the contexts, but 
things 
  -             // will get very nasty quick, so just do this for now.
  -             xlocator = m_callbacks.getXLocatorFromNode(nl.item(0));
  -       }
  -       else
  -       {
  -             xlocator = m_callbacks.getXLocatorFromNode(context);
  -       }
  -     }
  -     else
  -     {
  -       xlocator = m_callbacks.getXLocatorFromNode(context);
  -     }
  -*/
  -
        XLocator*       xlocator = 
executionContext.getXLocatorFromNode(context);
   
        if(0 == xlocator)
  @@ -1217,18 +1190,7 @@
                        int                                             opPos,
                        XPathExecutionContext&  executionContext) const
   {
  -     const XObjectPtr expr1 = executeMore(context, opPos + 2, 
executionContext);
  -
  -     // $$$ ToDo: This appears to be just an optimization, but is it really?
  -/*
  -     int objType = expr1.getType();
  -     if((XObject.CLASS_NUMBER != objType) && (XObject.CLASS_BOOLEAN != 
objType))
  -     {
  -       expr1 = expr1.bool() ? m_true : m_false;
  -     }
  -*/
  -
  -     return expr1;
  +     return executeMore(context, opPos + 2, executionContext);
   }
   
   
  
  
  
  1.34      +102 -5    xml-xalan/c/src/XPath/XPathExecutionContext.hpp
  
  Index: XPathExecutionContext.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContext.hpp,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- XPathExecutionContext.hpp 2001/01/08 18:28:24     1.33
  +++ XPathExecutionContext.hpp 2001/01/16 02:34:46     1.34
  @@ -80,8 +80,8 @@
   
   
   
  -//#include <XPath/Function.hpp>
   #include <XPath/MutableNodeRefList.hpp>
  +#include <XPath/ResultTreeFragBase.hpp>
   
   
   
  @@ -332,17 +332,17 @@
                        const XalanDOMString&   base) const = 0;
   
        /**
  -      * Borrow a cached MutableNodeRefList.
  +      * Borrow a cached MutableNodeRefList instance.
         *
  -      * @return A pointer the to node list.
  +      * @return A pointer to the instance.
         */
        virtual MutableNodeRefList*
        borrowMutableNodeRefList() = 0;
   
        /**
  -      * Return a previously borrowed MutableNodeRefList.
  +      * Return a previously borrowed MutableNodeRefList instance.
         *
  -      * @param theList A pointer the to previously borrowed node list.
  +      * @param theList A pointer the to previously borrowed instance.
         * @return true if the list was borrowed (at therefore, destroyed), 
false if not.
         */
        virtual bool
  @@ -477,6 +477,103 @@
   
                XalanDOMString*                 m_string;
        };
  +
  +     /**
  +      * Borrow a cached ResultTreeFragBase instance.
  +      *
  +      * @return A pointer to the instance.
  +      */
  +     virtual ResultTreeFragBase*
  +     borrowResultTreeFrag() = 0;
  +
  +     /**
  +      * Return a previously borrowed ResultTreeFragBase instance.
  +      *
  +      * @param theList A pointer the to previously borrowed instance.
  +      * @return true if the list was borrowed (at therefore, destroyed), 
false if not.
  +      */
  +     virtual bool
  +     returnResultTreeFrag(ResultTreeFragBase*        theResultTreeFragBase) 
= 0;
  +
  +
  +     class BorrowReturnResultTreeFrag
  +     {
  +     public:
  +
  +             BorrowReturnResultTreeFrag(XPathExecutionContext&       
executionContext) :
  +                     m_xpathExecutionContext(executionContext),
  +                     
m_resultTreeFrag(executionContext.borrowResultTreeFrag())
  +             {
  +                     assert(m_resultTreeFrag != 0);
  +             }
  +
  +             // N.B. Non-const copy constructor semantics (like 
std::auto_ptr)
  +             BorrowReturnResultTreeFrag(const BorrowReturnResultTreeFrag&    
theSource) :
  +                     
m_xpathExecutionContext(theSource.m_xpathExecutionContext),
  +                     m_resultTreeFrag(theSource.m_resultTreeFrag)
  +             {
  +                     assert(m_resultTreeFrag != 0);
  +
  +                     
((BorrowReturnResultTreeFrag&)theSource).m_resultTreeFrag = 0;
  +             }
  +
  +             ~BorrowReturnResultTreeFrag()
  +             {
  +                     if (m_resultTreeFrag != 0)
  +                     {
  +                             if 
(m_xpathExecutionContext.returnResultTreeFrag(m_resultTreeFrag) == false)
  +                             {
  +                                     delete m_resultTreeFrag;
  +                             }
  +                     }
  +             }
  +
  +             ResultTreeFragBase&
  +             operator*() const
  +             {
  +                     return *m_resultTreeFrag;
  +             }
  +
  +             ResultTreeFragBase*
  +             get() const
  +             {
  +                     return m_resultTreeFrag;
  +             }
  +
  +             ResultTreeFragBase*
  +             operator->() const
  +             {
  +                     return get();
  +             }
  +
  +             BorrowReturnResultTreeFrag
  +             clone(bool      deep = false) const
  +             {
  +                     BorrowReturnResultTreeFrag      theResult(
  +                                             m_xpathExecutionContext,
  +                                             m_resultTreeFrag->clone(deep));
  +
  +                     return theResult;
  +             }
  +
  +     private:
  +
  +             BorrowReturnResultTreeFrag(
  +                             XPathExecutionContext&  executionContext,
  +                             ResultTreeFragBase*             resultTreeFrag) 
:
  +                     m_xpathExecutionContext(executionContext),
  +                     m_resultTreeFrag(resultTreeFrag)
  +             {
  +                     assert(m_resultTreeFrag != 0);
  +             }
  +
  +             // Data members...
  +             XPathExecutionContext&  m_xpathExecutionContext;
  +
  +             ResultTreeFragBase*             m_resultTreeFrag;
  +     };
  +
  +     friend class BorrowReturnResultTreeFrag;
   
        /**
         * Create a MutableNodeRefList with the appropriate context.
  
  
  
  1.31      +69 -6     xml-xalan/c/src/XPath/XPathExecutionContextDefault.cpp
  
  Index: XPathExecutionContextDefault.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContextDefault.cpp,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- XPathExecutionContextDefault.cpp  2001/01/08 18:28:24     1.30
  +++ XPathExecutionContextDefault.cpp  2001/01/16 02:34:46     1.31
  @@ -73,6 +73,7 @@
   #include "FoundIndex.hpp"
   #include "XObjectFactory.hpp"
   #include "PrefixResolver.hpp"
  +#include "ResultTreeFrag.hpp"
   #include "QName.hpp"
   #include "XPathEnvSupport.hpp"
   
  @@ -99,6 +100,8 @@
        m_throwFoundIndex(false),
        m_availableCachedNodeLists(),
        m_busyCachedNodeLists(),
  +     m_availableCachedResultTreeFrags(),
  +     m_busyCachedResultTreeFrags(),
        m_stringCache()
   {
        m_availableCachedNodeLists.reserve(eMutableNodeRefListCacheMax);
  @@ -120,6 +123,11 @@
                m_availableCachedNodeLists.begin(),
                m_availableCachedNodeLists.end(),
                DeleteFunctor<MutableNodeRefList>());
  +
  +     for_each(
  +             m_availableCachedResultTreeFrags.begin(),
  +             m_availableCachedResultTreeFrags.end(),
  +             DeleteFunctor<ResultTreeFragBase>());
   }
   
   
  @@ -138,6 +146,13 @@
                m_busyCachedNodeLists.pop_back();
        }
   
  +     while (m_busyCachedResultTreeFrags.size() != 0)
  +     {
  +             
m_availableCachedResultTreeFrags.push_back(m_busyCachedResultTreeFrags.back());
  +
  +             m_busyCachedResultTreeFrags.pop_back();
  +     }
  +
        m_stringCache.reset();
   }
   
  @@ -324,21 +339,69 @@
        using std::find;
   #endif
   
  -     // Search from the back to the front, since we push the latest borrowed 
on the back.
  -     NodeRefListCacheType::reverse_iterator  i =
  -             find(m_busyCachedNodeLists.rbegin(), 
m_busyCachedNodeLists.rend(), theList);
  +     const NodeRefListCacheType::iterator    i =
  +             find(m_busyCachedNodeLists.begin(), 
m_busyCachedNodeLists.end(), theList);
   
  -     if (i == m_busyCachedNodeLists.rend())
  +     if (i == m_busyCachedNodeLists.end())
        {
                return false;
        }
        else
        {
                theList->clear();
  +
  +             m_availableCachedNodeLists.push_back(theList);
  +
  +             m_busyCachedNodeLists.erase(i);
  +
  +             return true;
  +     }
  +}
  +
  +
  +
  +ResultTreeFragBase*
  +XPathExecutionContextDefault::borrowResultTreeFrag()
  +{
  +     // We'll always return the back of the free list, since
  +     // that's the cheapest thing.
  +     if (m_availableCachedResultTreeFrags.size() == 0)
  +     {
  +             m_busyCachedResultTreeFrags.push_back(new ResultTreeFrag);
  +     }
  +     else
  +     {
  +             
m_busyCachedResultTreeFrags.push_back(m_availableCachedResultTreeFrags.back());
  +
  +             m_availableCachedResultTreeFrags.pop_back();
  +     }
  +
  +     return m_busyCachedResultTreeFrags.back();
  +}
  +
  +
  +
  +bool
  +XPathExecutionContextDefault::returnResultTreeFrag(ResultTreeFragBase*       
theResultTreeFragBase)
  +{
  +#if !defined(XALAN_NO_NAMESPACES)
  +     using std::find;
  +#endif
  +
  +     const ResultTreeFragCacheType::iterator         i =
  +             find(m_busyCachedResultTreeFrags.begin(), 
m_busyCachedResultTreeFrags.end(), theResultTreeFragBase);
  +
  +     if (i == m_busyCachedResultTreeFrags.end())
  +     {
  +             return false;
  +     }
  +     else
  +     {
  +             theResultTreeFragBase->clear();
   
  -             m_availableCachedNodeLists.push_back(*i);
  +             
m_availableCachedResultTreeFrags.push_back(theResultTreeFragBase);
   
  -             m_busyCachedNodeLists.erase(&*i);
  +             m_busyCachedResultTreeFrags.erase(i);
   
                return true;
        }
  
  
  
  1.31      +14 -1     xml-xalan/c/src/XPath/XPathExecutionContextDefault.hpp
  
  Index: XPathExecutionContextDefault.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExecutionContextDefault.hpp,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- XPathExecutionContextDefault.hpp  2001/01/08 18:28:24     1.30
  +++ XPathExecutionContextDefault.hpp  2001/01/16 02:34:46     1.31
  @@ -90,8 +90,8 @@
   
   
   
  -class XPathEnvSupport;
   class DOMSupport;
  +class XPathEnvSupport;
   
   
   
  @@ -194,6 +194,12 @@
        virtual bool
        returnMutableNodeRefList(MutableNodeRefList*    theList);
   
  +     virtual ResultTreeFragBase*
  +     borrowResultTreeFrag();
  +
  +     virtual bool
  +     returnResultTreeFrag(ResultTreeFragBase*        theResultTreeFragBase);
  +
        virtual MutableNodeRefList*
        createMutableNodeRefList() const;
   
  @@ -295,13 +301,16 @@
   
   #if defined(XALAN_NO_NAMESPACES)
        typedef vector<MutableNodeRefList*>                     
NodeRefListCacheType;
  +     typedef vector<ResultTreeFragBase*>                     
ResultTreeFragCacheType;
   #else
        typedef std::vector<MutableNodeRefList*>        NodeRefListCacheType;
  +     typedef std::vector<ResultTreeFragBase*>        ResultTreeFragCacheType;
   #endif
   
   protected:
   
        enum { eMutableNodeRefListCacheMax = 50,
  +                eResultTreeFragListCacheMax = 50,
                   eCachedArgVectorDefaultSize = 10 };
   
        XPathEnvSupport&                        m_xpathEnvSupport;
  @@ -323,6 +332,10 @@
        NodeRefListCacheType            m_availableCachedNodeLists;
   
        NodeRefListCacheType            m_busyCachedNodeLists;
  +
  +     ResultTreeFragCacheType         m_availableCachedResultTreeFrags;
  +
  +     ResultTreeFragCacheType         m_busyCachedResultTreeFrags;
   
        XalanDOMStringCache                     m_stringCache;
   
  
  
  
  1.21      +0 -132    xml-xalan/c/src/XPath/XPathExpression.cpp
  
  Index: XPathExpression.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExpression.cpp,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- XPathExpression.cpp       2000/11/30 19:40:59     1.20
  +++ XPathExpression.cpp       2001/01/16 02:34:46     1.21
  @@ -256,138 +256,6 @@
   
   
   
  -XPathExpression::XToken::XToken() :
  -     XObject(eTypeString),
  -     m_stringValue(),
  -     m_numberValue(DoubleSupport::getNaN())
  -{
  -}
  -
  -
  -
  -XPathExpression::XToken::XToken(const XalanDOMString&        theString) :
  -     XObject(eTypeString),
  -     m_stringValue(theString),
  -     m_numberValue(DoubleSupport::toDouble(theString))
  -{
  -}
  -
  -
  -
  -XPathExpression::XToken::XToken(double       theNumber) :
  -     XObject(eTypeString),
  -     m_stringValue(DoubleToDOMString(theNumber)),
  -     m_numberValue(theNumber)
  -{
  -}
  -
  -
  -
  -XPathExpression::XToken::XToken(const XToken&        theSource) :
  -     XObject(theSource),
  -     m_stringValue(theSource.m_stringValue),
  -     m_numberValue(theSource.m_numberValue)
  -{
  -}
  -
  -
  -
  -XPathExpression::XToken::~XToken()
  -{
  -}
  -
  -
  -
  -#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
  -XObject*
  -#else
  -XPathExpression::XToken*
  -#endif
  -XPathExpression::XToken::clone(void* theAddress) const
  -{
  -     return theAddress == 0 ? new XToken(*this) : new (theAddress) 
XToken(*this);
  -}
  -
  -
  -
  -XalanDOMString
  -XPathExpression::XToken::getTypeString() const
  -{
  -     return XALAN_STATIC_UCODE_STRING("#TOKEN");
  -}
  -
  -
  -
  -double
  -XPathExpression::XToken::num() const
  -{
  -     return m_numberValue;
  -}
  -
  -
  -
  -const XalanDOMString&
  -XPathExpression::XToken::str() const
  -{
  -     return m_stringValue;
  -}
  -
  -
  -
  -void
  -XPathExpression::XToken::ProcessXObjectTypeCallback(XObjectTypeCallback&     
theCallbackObject)
  -{
  -     theCallbackObject.String(*this, m_stringValue);
  -}
  -
  -
  -
  -void
  -XPathExpression::XToken::ProcessXObjectTypeCallback(XObjectTypeCallback&     
theCallbackObject) const
  -{
  -     theCallbackObject.String(*this, m_stringValue);
  -}
  -
  -
  -
  -XPathExpression::XToken&
  -XPathExpression::XToken::operator=(const XalanDOMString&     theString)
  -{
  -     m_stringValue = theString;
  -
  -     m_numberValue = DoubleSupport::toDouble(theString);
  -
  -     return *this;
  -}
  -
  -
  -
  -XPathExpression::XToken&
  -XPathExpression::XToken::operator=(double    theNumber)
  -{
  -     m_stringValue = DoubleToDOMString(theNumber);
  -
  -     m_numberValue = theNumber;
  -
  -     return *this;
  -}
  -
  -
  -
  -void 
  -XPathExpression::XToken::referenced()
  -{
  -}
  -
  -
  -
  -void 
  -XPathExpression::XToken::dereferenced()
  -{
  -}
  -
  -
  -
   XPathExpression::XPathExpression() :
        m_opMap(),
        m_lastOpCodeIndex(0),
  
  
  
  1.13      +1 -75     xml-xalan/c/src/XPath/XPathExpression.hpp
  
  Index: XPathExpression.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XPath/XPathExpression.hpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- XPathExpression.hpp       2000/11/21 21:08:38     1.12
  +++ XPathExpression.hpp       2001/01/16 02:34:46     1.13
  @@ -80,7 +80,7 @@
   
   
   
  -#include <XPath/XObject.hpp>
  +#include <XPath/XToken.hpp>
   #include <XPath/XPathException.hpp>
   
   
  @@ -728,80 +728,6 @@
   
                static XalanDOMString
                FormatErrorMessage(int  theOffset);
  -     };
  -
  -     class XToken : public XObject
  -     {
  -     public:
  -
  -             explicit
  -             XToken();
  -
  -             XToken(const XalanDOMString&    theString);
  -
  -             XToken(double   theNumber);
  -
  -             XToken(const XToken&    theSource);
  -
  -             virtual
  -             ~XToken();
  -
  -#if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
  -             virtual XObject*
  -#else
  -             virtual XToken*
  -#endif
  -             clone(void*             theAddress = 0) const;
  -
  -             virtual XalanDOMString
  -             getTypeString() const;
  -
  -             virtual double
  -             num() const;
  -
  -             virtual const XalanDOMString&
  -             str() const;
  -
  -             virtual void
  -             ProcessXObjectTypeCallback(XObjectTypeCallback&         
theCallbackObject);
  -
  -             virtual void
  -             ProcessXObjectTypeCallback(XObjectTypeCallback&         
theCallbackObject) const;
  -
  -             XToken&
  -             operator=(const XToken&         theRHS)
  -             {
  -                     m_stringValue = theRHS.m_stringValue;
  -
  -                     m_numberValue = theRHS.m_numberValue;
  -
  -                     return *this;
  -             }
  -
  -             XToken&
  -             operator=(const XalanDOMString&         theString);
  -
  -             XToken&
  -             operator=(double        theNumber);
  -
  -     protected:
  -
  -             virtual void 
  -             referenced();
  -
  -             virtual void 
  -             dereferenced();
  -
  -     private:
  -
  -             // Not defined...
  -             bool
  -             operator==(const XToken&) const;
  -
  -             // Data members...
  -             XalanDOMString  m_stringValue;
  -
  -             double                  m_numberValue;
        };
   
   
  
  
  
  1.1                  xml-xalan/c/src/XPath/XNumberBase.cpp
  
  Index: XNumberBase.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  // Class header file.
  #include "XNumberBase.hpp"
  
  
  
  #include <PlatformSupport/DoubleSupport.hpp>
  
  
  
  #include "XObjectTypeCallback.hpp"
  
  
  
  XNumberBase::XNumberBase() :
        XObject(eTypeNumber)
  {
  }
  
  
  
  XNumberBase::XNumberBase(const XNumberBase&           source) :
        XObject(source)
  {
  }
  
  
  
  XNumberBase::~XNumberBase()
  {
  }
  
  
  
  XalanDOMString
  XNumberBase::getTypeString() const
  {
        return XALAN_STATIC_UCODE_STRING("#NUMBER");
  }
  
  
  
  bool
  XNumberBase::boolean() const
  {
        const double    theValue = num();
  
        return DoubleSupport::isNaN(theValue) || DoubleSupport::equal(theValue, 
0.0) ? false : true;
  }
  
  
  
  void
  XNumberBase::ProcessXObjectTypeCallback(XObjectTypeCallback&  
theCallbackObject)
  {
        theCallbackObject.Number(*this,
                                                         num());
  }
  
  
  
  void
  XNumberBase::ProcessXObjectTypeCallback(XObjectTypeCallback&  
theCallbackObject) const
  {
        theCallbackObject.Number(*this,
                                                         num());
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XNumberBase.hpp
  
  Index: XNumberBase.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  #if !defined(XNUMBERBASE_HEADER_GUARD_1357924680)
  #define XNUMBERBASE_HEADER_GUARD_1357924680
  
  
  
  // Base header file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  #include <XalanDOM/XalanDOMString.hpp>
  
  
  
  // Base class header file.
  #include <XPath/XObject.hpp>
  
  
  
  class XALAN_XPATH_EXPORT XNumberBase : public XObject
  {
  public:
  
        XNumberBase(const XNumberBase&  source);
  
        virtual
        ~XNumberBase();
  
        // These methods are inherited from XObject ...
  
        virtual XalanDOMString
        getTypeString() const;
  
        virtual double
        num() const = 0;
  
        virtual bool
        boolean() const;
  
        virtual const XalanDOMString&
        str() const = 0;
  
        virtual void
        ProcessXObjectTypeCallback(XObjectTypeCallback&         
theCallbackObject);
  
        virtual void
        ProcessXObjectTypeCallback(XObjectTypeCallback&         
theCallbackObject) const;
  
  protected:
  
        /**
         * Constructor for derived classes
         */
        explicit
        XNumberBase();
  
  private:
  };
  
  
  
  #endif        // XNUMBERBASE_HEADER_GUARD_1357924680
  
  
  
  1.1                  xml-xalan/c/src/XPath/XToken.cpp
  
  Index: XToken.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  // Class header file.
  #include "XToken.hpp"
  
  
  
  #include <PlatformSupport/DoubleSupport.hpp>
  
  
  
  #include "XObjectTypeCallback.hpp"
  
  
  
  XToken::XToken() :
        XObject(eTypeString),
        m_stringValue(),
        m_numberValue(DoubleSupport::getNaN())
  {
  }
  
  
  
  XToken::XToken(const XalanDOMString&  theString) :
        XObject(eTypeString),
        m_stringValue(theString),
        m_numberValue(DoubleSupport::toDouble(theString))
  {
  }
  
  
  
  XToken::XToken(double theNumber) :
        XObject(eTypeString),
        m_stringValue(DoubleToDOMString(theNumber)),
        m_numberValue(theNumber)
  {
  }
  
  
  
  XToken::XToken(const XToken&  theSource) :
        XObject(theSource),
        m_stringValue(theSource.m_stringValue),
        m_numberValue(theSource.m_numberValue)
  {
  }
  
  
  
  XToken::~XToken()
  {
  }
  
  
  
  #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
  XObject*
  #else
  XToken*
  #endif
  XToken::clone(void*   theAddress) const
  {
        return theAddress == 0 ? new XToken(*this) : new (theAddress) 
XToken(*this);
  }
  
  
  
  XalanDOMString
  XToken::getTypeString() const
  {
        return XALAN_STATIC_UCODE_STRING("#TOKEN");
  }
  
  
  
  double
  XToken::num() const
  {
        return m_numberValue;
  }
  
  
  
  const XalanDOMString&
  XToken::str() const
  {
        return m_stringValue;
  }
  
  
  
  void
  XToken::ProcessXObjectTypeCallback(XObjectTypeCallback&       
theCallbackObject)
  {
        theCallbackObject.String(*this, m_stringValue);
  }
  
  
  
  void
  XToken::ProcessXObjectTypeCallback(XObjectTypeCallback&       
theCallbackObject) const
  {
        theCallbackObject.String(*this, m_stringValue);
  }
  
  
  
  XToken&
  XToken::operator=(const XalanDOMString&       theString)
  {
        m_stringValue = theString;
  
        m_numberValue = DoubleSupport::toDouble(theString);
  
        return *this;
  }
  
  
  
  XToken&
  XToken::operator=(double      theNumber)
  {
        m_stringValue = DoubleToDOMString(theNumber);
  
        m_numberValue = theNumber;
  
        return *this;
  }
  
  
  
  void 
  XToken::referenced()
  {
  }
  
  
  
  void 
  XToken::dereferenced()
  {
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XToken.hpp
  
  Index: XToken.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  #if !defined(XTOKEN_HEADER_GUARD_1357924680)
  #define XTOKEN_HEADER_GUARD_1357924680
  
  
  
  // Base header file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  // Base class...
  #include <XPath/XObject.hpp>
  
  
  
  class XALAN_XPATH_EXPORT XToken : public XObject
  {
  public:
  
        explicit
        XToken();
  
        XToken(const XalanDOMString&    theString);
  
        XToken(double   theNumber);
  
        XToken(const XToken&    theSource);
  
        virtual
        ~XToken();
  
  #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual XObject*
  #else
        virtual XToken*
  #endif
        clone(void*             theAddress = 0) const;
  
        virtual XalanDOMString
        getTypeString() const;
  
        virtual double
        num() const;
  
        virtual const XalanDOMString&
        str() const;
  
        virtual void
        ProcessXObjectTypeCallback(XObjectTypeCallback&         
theCallbackObject);
  
        virtual void
        ProcessXObjectTypeCallback(XObjectTypeCallback&         
theCallbackObject) const;
  
        XToken&
        operator=(const XToken&         theRHS)
        {
                m_stringValue = theRHS.m_stringValue;
  
                m_numberValue = theRHS.m_numberValue;
  
                return *this;
        }
  
        XToken&
        operator=(const XalanDOMString&         theString);
  
        XToken&
        operator=(double        theNumber);
  
  protected:
  
        virtual void 
        referenced();
  
        virtual void 
        dereferenced();
  
  private:
  
        // Not defined...
        bool
        operator==(const XToken&) const;
  
        // Data members...
        XalanDOMString  m_stringValue;
  
        double                  m_numberValue;
  };
  
  
  
  #endif        // XTOKEN_HEADER_GUARD_1357924680
  
  
  
  1.1                  xml-xalan/c/src/XPath/XTokenNumberAdapter.cpp
  
  Index: XTokenNumberAdapter.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  // Class header file.
  #include "XTokenNumberAdapter.hpp"
  
  
  
  #include "XToken.hpp"
  
  
  
  XTokenNumberAdapter::XTokenNumberAdapter(const XToken&        theToken) :
        XNumberBase(),
        m_value(theToken)
  {
  }
  
  
  
  XTokenNumberAdapter::XTokenNumberAdapter(const XTokenNumberAdapter&           
source) :
        XNumberBase(source),
        m_value(source.m_value)
  {
  }
  
  
  
  XTokenNumberAdapter::~XTokenNumberAdapter()
  {
  }
  
  
  
  #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
  XObject*
  #else
  XTokenNumberAdapter*
  #endif
  XTokenNumberAdapter::clone(void*      theAddress) const
  {
        return theAddress == 0 ? new XTokenNumberAdapter(*this) : new 
(theAddress) XTokenNumberAdapter(*this);
  };
  
  
  
  double
  XTokenNumberAdapter::num() const
  {
        return m_value.num();
  }
  
  
  
  const XalanDOMString&
  XTokenNumberAdapter::str() const
  {
        return m_value.str();
  }
  
  
  
  XTokenNumberAdapter::eObjectType
  XTokenNumberAdapter::getRealType() const
  {
        return eTypeXTokenNumberAdapter;
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XTokenNumberAdapter.hpp
  
  Index: XTokenNumberAdapter.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  #if !defined(XTOKENNUMBERADAPTER_HEADER_GUARD_1357924680)
  #define XTOKENNUMBERADAPTER_HEADER_GUARD_1357924680
  
  
  
  // Base header file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  #include <XalanDOM/XalanDOMString.hpp>
  
  
  
  // Base class header file.
  #include <XPath/XNumberBase.hpp>
  
  
  
  class XToken;
  
  
  
  class XALAN_XPATH_EXPORT XTokenNumberAdapter : public XNumberBase
  {
  public:
  
        /**
         * Create an XTokenNumberAdapter from an XToken.
         *
         * @param theXToken The XToken instance to adapt
         */
        XTokenNumberAdapter(const XToken&       theToken);
  
        XTokenNumberAdapter(const XTokenNumberAdapter&  source);
  
        virtual
        ~XTokenNumberAdapter();
  
        // These methods are inherited from XObject ...
  
  #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual XObject*
  #else
        virtual XTokenNumberAdapter*
  #endif
        clone(void*             theAddress = 0) const;
  
        virtual double
        num() const;
  
        virtual const XalanDOMString&
        str() const;
  
  protected:
  
        virtual eObjectType
        getRealType() const;
  
  private:
  
        // XToken instance that we're adapting...
        const XToken&   m_value;
  };
  
  
  
  #endif        // XTOKENNUMBERADAPTER_HEADER_GUARD_1357924680
  
  
  
  1.1                  xml-xalan/c/src/XPath/XTokenNumberAdapterAllocator.cpp
  
  Index: XTokenNumberAdapterAllocator.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2000 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  // Class header file.
  #include "XTokenNumberAdapterAllocator.hpp"
  
  
  
  XTokenNumberAdapterAllocator::XTokenNumberAdapterAllocator(size_type  
theBlockCount) :
        m_allocator(theBlockCount)
  {
  }
  
  
  
  XTokenNumberAdapterAllocator::~XTokenNumberAdapterAllocator()
  {
  }
  
  
  
  XTokenNumberAdapterAllocator::object_type*
  XTokenNumberAdapterAllocator::create(const XToken&    theXToken) 
  {
        object_type* const      theBlock = m_allocator.allocateBlock();
        assert(theBlock != 0);
  
        object_type* const      theResult = new(theBlock) 
object_type(theXToken);
  
        m_allocator.commitAllocation(theBlock);
  
        return theResult;
  }
  
  
  
  XTokenNumberAdapterAllocator::object_type*
  XTokenNumberAdapterAllocator::clone(const object_type&        theObject)
  {
        object_type* const              theBlock = m_allocator.allocateBlock();
        assert(theBlock != 0);
  
        theObject.clone(theBlock);
  
        m_allocator.commitAllocation(theBlock);
  
        return theBlock;
  }
  
  
  
  bool 
  XTokenNumberAdapterAllocator::destroy(object_type*    theObject)
  {
        return m_allocator.destroyObject(theObject);
  }
  
  
  
  void 
  XTokenNumberAdapterAllocator::reset()
  {
        m_allocator.reset();
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XTokenNumberAdapterAllocator.hpp
  
  Index: XTokenNumberAdapterAllocator.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2000 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  #if !defined(XTOKENNUMBERADAPTERALLOCATOR_INCLUDE_GUARD_1357924680)
  #define XTOKENNUMBERADAPTERALLOCATOR_INCLUDE_GUARD_1357924680
  
  
  
  // Base include file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  #include <XPath/XTokenNumberAdapter.hpp>
  
  
  
  #include <PlatformSupport/ReusableArenaAllocator.hpp>
  
  
  
  class XALAN_XPATH_EXPORT XTokenNumberAdapterAllocator
  {
  public:
  
        typedef XTokenNumberAdapter                                             
object_type;
  
        typedef ReusableArenaAllocator<object_type>             
ArenaAllocatorType;
        typedef ArenaAllocatorType::size_type                   size_type;
  
        /**
         * Construct an instance that will allocate blocks of the specified 
size.
         *
         * @param theBlockSize The block size.
         */
        XTokenNumberAdapterAllocator(size_type  theBlockCount);
  
        ~XTokenNumberAdapterAllocator();
  
        /**
         * Create an instance from an XToken.
         * 
         * @param theXToken The source XToken
         *
         * @return A pointer to the new object
         */
        object_type*
        create(const XToken&    theXToken);
  
        /**
         * Clone an object.
         * 
         * @param theObject The source object
         *
         * @return A pointer to the new object
         */
        object_type*
        clone(const object_type&        theObject);
  
        /**
         * Delete an XStringAdapter object from allocator.       
         */
        bool
        destroy(object_type*    theObject);
  
        /**
         * Determine if an object is owned by the allocator...
         */
        bool
        ownsObject(const object_type*   theObject)
        {
                return m_allocator.ownsObject(theObject);
        }
  
        /**
         * Delete all XStringAdapter objects from allocator.     
         */
        void 
        reset();
  
        /**
         * Get size of an ArenaBlock, that is, the number
         * of objects in each block.
         *
         * @return The size of the block
         */
        size_type
        getBlockCount() const
        {
                return m_allocator.getBlockCount();
        }
  
        /**
         * Get the number of ArenaBlocks currently allocated.
         *
         * @return The number of blocks.
         */
        size_type
        getBlockSize() const
        {
                return m_allocator.getBlockSize();
        }
  
  private:
  
        // Not implemented...
        XTokenNumberAdapterAllocator(const XTokenNumberAdapterAllocator&);
  
        XTokenNumberAdapterAllocator&
        operator=(const XTokenNumberAdapterAllocator&);
  
        // Data members...
        ArenaAllocatorType      m_allocator;
  };
  
  
  
  #endif        // XTOKENNUMBERADAPTERALLOCATOR_INCLUDE_GUARD_1357924680
  
  
  
  1.1                  xml-xalan/c/src/XPath/XTokenStringAdapter.cpp
  
  Index: XTokenStringAdapter.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  // Class header file.
  #include "XTokenStringAdapter.hpp"
  
  
  
  #include "XToken.hpp"
  
  
  
  XTokenStringAdapter::XTokenStringAdapter(const XToken&        theToken) :
        XStringBase(),
        m_value(theToken)
  {
  }
  
  
  
  XTokenStringAdapter::XTokenStringAdapter(const XTokenStringAdapter&           
source) :
        XStringBase(source),
        m_value(source.m_value)
  {
  }
  
  
  
  XTokenStringAdapter::~XTokenStringAdapter()
  {
  }
  
  
  
  #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
  XObject*
  #else
  XTokenStringAdapter*
  #endif
  XTokenStringAdapter::clone(void*      theAddress) const
  {
        return theAddress == 0 ? new XTokenStringAdapter(*this) : new 
(theAddress) XTokenStringAdapter(*this);
  };
  
  
  
  double
  XTokenStringAdapter::num() const
  {
        return m_value.num();
  }
  
  
  
  const XalanDOMString&
  XTokenStringAdapter::str() const
  {
        return m_value.str();
  }
  
  
  
  XTokenStringAdapter::eObjectType
  XTokenStringAdapter::getRealType() const
  {
        return eTypeXTokenStringAdapter;
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XTokenStringAdapter.hpp
  
  Index: XTokenStringAdapter.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  #if !defined(XTOKENSTRINGADAPTER_HEADER_GUARD_1357924680)
  #define XTOKENSTRINGADAPTER_HEADER_GUARD_1357924680
  
  
  
  // Base header file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  #include <XalanDOM/XalanDOMString.hpp>
  
  
  
  // Base class header file.
  #include <XPath/XStringBase.hpp>
  
  
  
  class XToken;
  
  
  
  class XALAN_XPATH_EXPORT XTokenStringAdapter : public XStringBase
  {
  public:
  
        /**
         * Create an XTokenStringAdapter from an XToken.
         *
         * @param theXToken The XToken instance to adapt
         */
        XTokenStringAdapter(const XToken&       theToken);
  
        XTokenStringAdapter(const XTokenStringAdapter&  source);
  
        virtual
        ~XTokenStringAdapter();
  
        // These methods are inherited from XObject ...
  
  #if defined(XALAN_NO_COVARIANT_RETURN_TYPE)
        virtual XObject*
  #else
        virtual XTokenStringAdapter*
  #endif
        clone(void*             theAddress = 0) const;
  
        virtual double
        num() const;
  
        virtual const XalanDOMString&
        str() const;
  
  protected:
  
        virtual eObjectType
        getRealType() const;
  
  private:
  
        // XToken instance that we're adapting...
        const XToken&   m_value;
  };
  
  
  
  #endif        // XTOKENSTRINGADAPTER_HEADER_GUARD_1357924680
  
  
  
  1.1                  xml-xalan/c/src/XPath/XTokenStringAdapterAllocator.cpp
  
  Index: XTokenStringAdapterAllocator.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2000 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  // Class header file.
  #include "XTokenStringAdapterAllocator.hpp"
  
  
  
  XTokenStringAdapterAllocator::XTokenStringAdapterAllocator(size_type  
theBlockCount) :
        m_allocator(theBlockCount)
  {
  }
  
  
  
  XTokenStringAdapterAllocator::~XTokenStringAdapterAllocator()
  {
  }
  
  
  
  XTokenStringAdapterAllocator::object_type*
  XTokenStringAdapterAllocator::create(const XToken&    theXToken) 
  {
        object_type* const      theBlock = m_allocator.allocateBlock();
        assert(theBlock != 0);
  
        object_type* const      theResult = new(theBlock) 
object_type(theXToken);
  
        m_allocator.commitAllocation(theBlock);
  
        return theResult;
  }
  
  
  
  XTokenStringAdapterAllocator::object_type*
  XTokenStringAdapterAllocator::clone(const object_type&        value)
  {
        object_type* const              theBlock = m_allocator.allocateBlock();
        assert(theBlock != 0);
  
        value.clone(theBlock);
  
        m_allocator.commitAllocation(theBlock);
  
        return theBlock;
  }
  
  
  
  bool 
  XTokenStringAdapterAllocator::destroy(object_type*    theString)
  {
        return m_allocator.destroyObject(theString);
  }
  
  
  
  void 
  XTokenStringAdapterAllocator::reset()
  {
        m_allocator.reset();
  }
  
  
  
  1.1                  xml-xalan/c/src/XPath/XTokenStringAdapterAllocator.hpp
  
  Index: XTokenStringAdapterAllocator.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2000 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    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.
   *
   * 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.
   *
   * 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]
   *
   * 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.
   *
   * 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
   * 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
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  #if !defined(XTOKENSTRINGADAPTERALLOCATOR_INCLUDE_GUARD_1357924680)
  #define XTOKENSTRINGADAPTERALLOCATOR_INCLUDE_GUARD_1357924680
  
  
  
  // Base include file.  Must be first.
  #include <XPath/XPathDefinitions.hpp>
  
  
  
  #include <XPath/XTokenStringAdapter.hpp>
  
  
  
  #include <PlatformSupport/ReusableArenaAllocator.hpp>
  
  
  
  class XALAN_XPATH_EXPORT XTokenStringAdapterAllocator
  {
  public:
  
        typedef XTokenStringAdapter                                             
object_type;
  
        typedef ReusableArenaAllocator<object_type>             
ArenaAllocatorType;
        typedef ArenaAllocatorType::size_type                   size_type;
  
        /**
         * Construct an instance that will allocate blocks of the specified 
size.
         *
         * @param theBlockSize The block size.
         */
        XTokenStringAdapterAllocator(size_type  theBlockCount);
  
        ~XTokenStringAdapterAllocator();
  
        /**
         * Create an XTokenStringAdapter object from an XToken.
         * 
         * @param theXToken The source XToken
         *
         * @return a pointer to string
         */
        object_type*
        create(const XToken&    theXToken);
  
        /**
         * Clone an XTokenStringAdapter object.
         * 
         * @param value source XTokenStringAdapter
         *
         * @return pointer to an XTokenStringAdapter
         */
        object_type*
        clone(const object_type&        value);
  
        /**
         * Delete an XStringAdapter object from allocator.       
         */
        bool
        destroy(object_type*    theString);
  
        /**
         * Determine if an object is owned by the allocator...
         */
        bool
        ownsObject(const object_type*   theObject)
        {
                return m_allocator.ownsObject(theObject);
        }
  
        /**
         * Delete all XStringAdapter objects from allocator.     
         */
        void 
        reset();
  
        /**
         * Get size of an ArenaBlock, that is, the number
         * of objects in each block.
         *
         * @return The size of the block
         */
        size_type
        getBlockCount() const
        {
                return m_allocator.getBlockCount();
        }
  
        /**
         * Get the number of ArenaBlocks currently allocated.
         *
         * @return The number of blocks.
         */
        size_type
        getBlockSize() const
        {
                return m_allocator.getBlockSize();
        }
  
  private:
  
        // Not implemented...
        XTokenStringAdapterAllocator(const XTokenStringAdapterAllocator&);
  
        XTokenStringAdapterAllocator&
        operator=(const XTokenStringAdapterAllocator&);
  
        // Data members...
        ArenaAllocatorType      m_allocator;
  };
  
  
  
  #endif        // XTOKENSTRINGADAPTERALLOCATOR_INCLUDE_GUARD_1357924680
  
  
  

Reply via email to