dbertoni    00/12/20 20:27:24

  Modified:    c/src/XalanSourceTree XalanSourceTreeDocument.cpp
                        XalanSourceTreeDocument.hpp
  Log:
  Added options not to cache all text node data.
  
  Revision  Changes    Path
  1.3       +34 -7     
xml-xalan/c/src/XalanSourceTree/XalanSourceTreeDocument.cpp
  
  Index: XalanSourceTreeDocument.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeDocument.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XalanSourceTreeDocument.cpp       2000/12/17 22:26:59     1.2
  +++ XalanSourceTreeDocument.cpp       2000/12/21 04:27:24     1.3
  @@ -79,7 +79,7 @@
   
   
   
  -XalanSourceTreeDocument::XalanSourceTreeDocument(bool        fDynamic) :
  +XalanSourceTreeDocument::XalanSourceTreeDocument(bool        fPoolAllText) :
        XalanDocument(),
        m_firstChild(0),
        m_documentElement(0),
  @@ -95,9 +95,10 @@
        m_stringPool(),
        m_attributesVector(),
        m_nextIndexValue(2),
  -     m_dynamic(fDynamic),
  +     m_poolAllText(fPoolAllText),
        m_elementsByID(),
  -     m_unparsedEntityURIs()
  +     m_unparsedEntityURIs(),
  +     m_nonPooledStrings()
   {
   }
   
  @@ -706,10 +707,10 @@
   {
        assert(chars != 0);
   
  -     const XalanDOMString&   theString = m_stringPool.get(chars, length);
  -
  -     if (isXMLWhitespace(theString) == true)
  +     if (isXMLWhitespace(chars, 0, length) == true)
        {
  +             const XalanDOMString&   theString = m_stringPool.get(chars, 
length);
  +
                return m_textIWSAllocator.create(
                                theString,
                                theParentElement,
  @@ -720,7 +721,7 @@
        else
        {
                return m_textAllocator.create(
  -                             theString,
  +                             getTextNodeString(chars, length),
                                theParentElement,
                                thePreviousSibling,
                                theNextSibling,
  @@ -972,6 +973,32 @@
                                        
c_wstr(theAttributeVector[i]->getValue()),
                                        theOwnerElement));
                }
  +     }
  +}
  +
  +
  +
  +inline const XalanDOMString&
  +XalanSourceTreeDocument::getTextNodeString(
  +                     const XalanDOMChar*             chars,
  +                     unsigned int                    length)
  +{
  +     if (m_poolAllText == true)
  +     {
  +             return m_stringPool.get(chars, length);
  +     }
  +     else
  +     {
  +             const StringCollectionType::iterator    theIterator =
  +                             
m_nonPooledStrings.insert(m_nonPooledStrings.end(), XalanDOMString());
  +
  +             XalanDOMString&         theString = *theIterator;
  +
  +             assign(theString, chars, length);
  +
  +             assert(length == ::length(theString));
  +
  +             return theString;
        }
   }
   
  
  
  
  1.3       +15 -3     
xml-xalan/c/src/XalanSourceTree/XalanSourceTreeDocument.hpp
  
  Index: XalanSourceTreeDocument.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeDocument.hpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XalanSourceTreeDocument.hpp       2000/12/17 22:26:59     1.2
  +++ XalanSourceTreeDocument.hpp       2000/12/21 04:27:24     1.3
  @@ -63,6 +63,7 @@
   
   
   
  +#include <deque>
   #include <map>
   
   
  @@ -108,6 +109,8 @@
                                XalanDOMString,
                                XalanDOMString,
                                less<XalanDOMString> >                          
                        UnparsedEntityURIMapType;
  +
  +     typedef deque<XalanDOMString>                                           
                StringCollectionType;
   #else
        typedef std::map<
                                const XalanDOMChar*,
  @@ -117,6 +120,8 @@
        typedef std::map<
                                XalanDOMString,
                                XalanDOMString>                                 
                                UnparsedEntityURIMapType;
  +
  +     typedef std::deque<XalanDOMString>                                      
                StringCollectionType;
   #endif
   
        /**
  @@ -136,10 +141,10 @@
         *
         * Constructor for XalanSourceTreeDocument.
         *
  -      * @param fDynamic If true, the document will allow dynamic building 
through _some_ of the standard DOM APIs
  +      * @param fPoolAllText If false, text node data that is not whitespace 
will not be pooled.
         *
         */
  -     XalanSourceTreeDocument(bool    fDynamic = false);
  +     XalanSourceTreeDocument(bool    fPoolAllText = true);
   
        virtual
        ~XalanSourceTreeDocument();
  @@ -401,6 +406,11 @@
                        unsigned int                            
theAttributeCount,
                        XalanSourceTreeElement*         theOwnerElement);
   
  +     const XalanDOMString&
  +     getTextNodeString(
  +                     const XalanDOMChar*                     chars,
  +                     unsigned int                            length);
  +
        // Not implemented...
        XalanSourceTreeDocument(const XalanSourceTreeDocument&  theSource);
   
  @@ -440,11 +450,13 @@
   
        unsigned int                                                            
        m_nextIndexValue;
   
  -     const bool                                                              
                m_dynamic;
  +     const bool                                                              
                m_poolAllText;
   
        ElementByIDMapType                                                      
        m_elementsByID;
   
        UnparsedEntityURIMapType                                                
m_unparsedEntityURIs;
  +
  +     StringCollectionType                                                    
m_nonPooledStrings;
   
        static const XalanDOMString&                                    
s_nameString;
   };
  
  
  

Reply via email to