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;
};