From 9bd4fea59bb12616074932b4f9abcd6d548cb2ed Mon Sep 17 00:00:00 2001
From: PeiYong Zhang <peiyongz@apache.org>
Date: Thu, 1 Apr 2004 22:00:55 +0000
Subject: [PATCH] to retrieve Memory Manager

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@175848 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/dom/DOMNamedNodeMap.hpp |  2 ++
 src/xercesc/dom/DOMNode.hpp         | 21 ++++++++++++++++++++-
 src/xercesc/dom/DOMNodeIterator.hpp |  2 ++
 src/xercesc/dom/DOMTreeWalker.hpp   |  2 ++
 4 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/xercesc/dom/DOMNamedNodeMap.hpp b/src/xercesc/dom/DOMNamedNodeMap.hpp
index 0a255a7b9..8645dcca4 100644
--- a/src/xercesc/dom/DOMNamedNodeMap.hpp
+++ b/src/xercesc/dom/DOMNamedNodeMap.hpp
@@ -278,6 +278,8 @@ public:
 
 };
 
+#define GetDOMNamedNodeMapMemoryManager   GET_INDIRECT_MM(fOwnerNode)
+
 XERCES_CPP_NAMESPACE_END
 
 #endif
diff --git a/src/xercesc/dom/DOMNode.hpp b/src/xercesc/dom/DOMNode.hpp
index 3e06cd82e..ae3ae1465 100644
--- a/src/xercesc/dom/DOMNode.hpp
+++ b/src/xercesc/dom/DOMNode.hpp
@@ -1019,7 +1019,26 @@ public:
     //@}
 #endif
 };
- 
+
+/***
+ * Utilities macros for getting memory manager within DOM
+***/
+#define GET_OWNER_DOCUMENT(ptr)      \
+        ((DOMDocumentImpl*)(ptr->getOwnerDocument()))
+
+#define GET_DIRECT_MM(ptr)           \
+        ptr ? ((DOMDocumentImpl*)ptr)->getMemoryManager() : XMLPlatformUtils::fgMemoryManager        
+
+#define GET_INDIRECT_MM(ptr)                                                    \
+        !ptr ? XMLPlatformUtils::fgMemoryManager :                              \
+        GET_OWNER_DOCUMENT(ptr) ? GET_OWNER_DOCUMENT(ptr)->getMemoryManager() : \
+        XMLPlatformUtils::fgMemoryManager
+
+/***
+ * For DOMNode and its derivatives
+***/
+#define GetDOMNodeMemoryManager GET_INDIRECT_MM(this)
+
 XERCES_CPP_NAMESPACE_END
 
 #endif
diff --git a/src/xercesc/dom/DOMNodeIterator.hpp b/src/xercesc/dom/DOMNodeIterator.hpp
index 9818ba13c..ddba4fd7f 100644
--- a/src/xercesc/dom/DOMNodeIterator.hpp
+++ b/src/xercesc/dom/DOMNodeIterator.hpp
@@ -228,6 +228,8 @@ public:
     //@}
 };
 
+#define GetDOMNodeIteratorMemoryManager GET_DIRECT_MM(fDocument)
+
 XERCES_CPP_NAMESPACE_END
 
 #endif
diff --git a/src/xercesc/dom/DOMTreeWalker.hpp b/src/xercesc/dom/DOMTreeWalker.hpp
index aba341450..8fbdf221f 100644
--- a/src/xercesc/dom/DOMTreeWalker.hpp
+++ b/src/xercesc/dom/DOMTreeWalker.hpp
@@ -308,6 +308,8 @@ public:
     //@}
 };
 
+#define GetDOMTreeWalkerMemoryManager GET_INDIRECT_MM(fCurrentNode)
+
 XERCES_CPP_NAMESPACE_END
 
 #endif
-- 
GitLab