dbertoni 01/06/06 14:40:16
Modified: c/src/XalanSourceTree XalanSourceTreeParserLiaison.cpp
XalanSourceTreeParserLiaison.hpp
Log:
Allow for documents that persist between resets.
Revision Changes Path
1.13 +85 -10 xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.cpp
Index: XalanSourceTreeParserLiaison.cpp
===================================================================
RCS file:
/home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- XalanSourceTreeParserLiaison.cpp 2001/05/10 17:52:49 1.12
+++ XalanSourceTreeParserLiaison.cpp 2001/06/06 21:40:15 1.13
@@ -83,19 +83,39 @@
XalanSourceTreeParserLiaison::XalanSourceTreeParserLiaison(XalanSourceTreeDOMSupport&
theSupport) :
- m_xercesDOMSupport(),
- m_xercesParserLiaison(m_xercesDOMSupport),
+ m_xercesParserLiaison(),
m_documentMap(),
- m_domSupport(theSupport),
+ m_persistentDocumentMap(),
m_poolAllText(true)
{
}
+XalanSourceTreeParserLiaison::XalanSourceTreeParserLiaison() :
+ m_xercesParserLiaison(),
+ m_documentMap(),
+ m_persistentDocumentMap(),
+ m_poolAllText(true)
+{
+}
+
+
+
XalanSourceTreeParserLiaison::~XalanSourceTreeParserLiaison()
{
reset();
+
+#if !defined(XALAN_NO_NAMESPACES)
+ using std::for_each;
+#endif
+
+ // Delete any persistent documents.
+ for_each(m_persistentDocumentMap.begin(),
+ m_persistentDocumentMap.end(),
+ makeMapValueDeleteFunctor(m_persistentDocumentMap));
+
+ m_persistentDocumentMap.clear();
}
@@ -107,18 +127,14 @@
using std::for_each;
#endif
- // Delete any live documents.
+ // Delete any documents.
for_each(m_documentMap.begin(),
m_documentMap.end(),
makeMapValueDeleteFunctor(m_documentMap));
m_documentMap.clear();
- m_domSupport.reset();
-
m_xercesParserLiaison.reset();
-
- m_xercesDOMSupport.reset();
}
@@ -413,10 +429,26 @@
XalanSourceTreeDocument*
XalanSourceTreeParserLiaison::mapDocument(const XalanDocument* theDocument)
const
{
- const DocumentMapType::const_iterator i =
+ DocumentMapType::const_iterator i =
m_documentMap.find(theDocument);
- return i != m_documentMap.end() ? (*i).second : 0;
+ if (i != m_documentMap.end())
+ {
+ return (*i).second;
+ }
+ else
+ {
+ i = m_persistentDocumentMap.find(theDocument);
+
+ if (i != m_persistentDocumentMap.end())
+ {
+ return (*i).second;
+ }
+ else
+ {
+ return 0;
+ }
+ }
}
@@ -430,4 +462,47 @@
m_documentMap[theNewDocument] = theNewDocument;
return theNewDocument;
+}
+
+
+
+bool
+XalanSourceTreeParserLiaison::setPersistent(XalanSourceTreeDocument* theDocument)
+{
+ const DocumentMapType::iterator i =
+ m_documentMap.find(theDocument);
+
+ if (i != m_documentMap.end())
+ {
+ return false;
+ }
+ else
+ {
+ m_persistentDocumentMap[(*i).first] = (*i).second;
+
+ m_documentMap.erase(i);
+
+ return true;
+ }
+}
+
+
+bool
+XalanSourceTreeParserLiaison::unsetPersistent(XalanSourceTreeDocument*
theDocument)
+{
+ const DocumentMapType::iterator i =
+ m_persistentDocumentMap.find(theDocument);
+
+ if (i != m_persistentDocumentMap.end())
+ {
+ return false;
+ }
+ else
+ {
+ m_documentMap[(*i).first] = (*i).second;
+
+ m_persistentDocumentMap.erase(i);
+
+ return true;
+ }
}
1.9 +17 -5 xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.hpp
Index: XalanSourceTreeParserLiaison.hpp
===================================================================
RCS file:
/home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeParserLiaison.hpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- XalanSourceTreeParserLiaison.hpp 2001/05/10 17:52:50 1.8
+++ XalanSourceTreeParserLiaison.hpp 2001/06/06 21:40:15 1.9
@@ -89,9 +89,16 @@
* Construct a XalanSourceTreeParserLiaison instance.
*
* @param theSupport instance of DOMSupport object
+ *
+ * @deprecated This constructor is deprecated. Use the default constructor
instead.
*/
XalanSourceTreeParserLiaison(XalanSourceTreeDOMSupport& theSupport);
+ /**
+ * Construct a XalanSourceTreeParserLiaison instance.
+ */
+ XalanSourceTreeParserLiaison();
+
virtual
~XalanSourceTreeParserLiaison();
@@ -353,6 +360,12 @@
XalanSourceTreeDocument*
createXalanSourceTreeDocument();
+ bool
+ setPersistent(XalanSourceTreeDocument* theDocument);
+
+ bool
+ unsetPersistent(XalanSourceTreeDocument* theDocument);
+
#if defined(XALAN_NO_NAMESPACES)
typedef map<const XalanDocument*,
XalanSourceTreeDocument*,
@@ -365,15 +378,14 @@
private:
// Data members...
- XercesDOMSupport m_xercesDOMSupport; //
Must be before m_xercesParserLiaison!!!
- XercesParserLiaison m_xercesParserLiaison;
+ XercesParserLiaison m_xercesParserLiaison;
- DocumentMapType m_documentMap;
+ DocumentMapType m_documentMap;
- XalanSourceTreeDOMSupport& m_domSupport;
+ DocumentMapType m_persistentDocumentMap;
- bool m_poolAllText;
+ bool m_poolAllText;
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]