/**\r
* @file AbstractDOMCachingXMLObject.h\r
* \r
- * Extension of AbstractXMLObject that implements a DOMCachingXMLObject. \r
+ * AbstractXMLObject mixin that implements DOM caching\r
*/\r
\r
#if !defined(__xmltooling_abstractdomxmlobj_h__)\r
#define __xmltooling_abstractdomxmlobj_h__\r
\r
#include <xmltooling/AbstractXMLObject.h>\r
-#include <xmltooling/DOMCachingXMLObject.h>\r
\r
#if defined (_MSC_VER)\r
#pragma warning( push )\r
namespace xmltooling {\r
\r
/**\r
- * Extension of AbstractXMLObject that implements a DOMCachingXMLObject.\r
- * This is the primary base class for XMLObject implementation classes to use.\r
+ * AbstractXMLObject mixin that implements DOM caching.\r
+ * Inherit from this class to implement standard DOM caching behavior.\r
*/\r
- class XMLTOOL_API AbstractDOMCachingXMLObject : public AbstractXMLObject, public DOMCachingXMLObject\r
+ class XMLTOOL_API AbstractDOMCachingXMLObject : public virtual AbstractXMLObject\r
{\r
public:\r
virtual ~AbstractDOMCachingXMLObject();\r
\r
- /**\r
- * @see DOMCachingXMLObject::getDOM()\r
- */\r
DOMElement* getDOM() const {\r
return m_dom;\r
}\r
\r
- /**\r
- * @see DOMCachingXMLObject::setDOM()\r
- */\r
- void setDOM(DOMElement* dom, bool bindDocument=false);\r
+ void setDOM(DOMElement* dom, bool bindDocument=false) const;\r
\r
- /**\r
- * @see DOMCachingXMLObject::setDocument()\r
- */\r
- void setDocument(DOMDocument* doc) {\r
+ void setDocument(DOMDocument* doc) const {\r
if (m_document)\r
m_document->release();\r
m_document=doc;\r
}\r
\r
- /**\r
- * @see DOMCachingXMLObject::releaseDOM()\r
- */\r
- virtual void releaseDOM();\r
+ virtual void releaseDOM() const;\r
\r
- /**\r
- * @see DOMCachingXMLObject::releaseParentDOM()\r
- */\r
- virtual void releaseParentDOM(bool propagateRelease=true);\r
+ virtual void releaseParentDOM(bool propagateRelease=true) const;\r
\r
- /**\r
- * @see DOMCachingXMLObject::releaseChildrenDOM()\r
- */\r
- virtual void releaseChildrenDOM(bool propagateRelease=true);\r
+ virtual void releaseChildrenDOM(bool propagateRelease=true) const;\r
\r
- /**\r
- * A convenience method that is equal to calling releaseDOM() then releaseParentDOM(true).\r
- */\r
- void releaseThisandParentDOM() {\r
- if (m_dom) {\r
- releaseDOM();\r
- releaseParentDOM(true);\r
- }\r
- }\r
- \r
- /**\r
- * A convenience method that is equal to calling releaseChildrenDOM(true) then releaseDOM().\r
- */\r
- void releaseThisAndChildrenDOM() {\r
- if (m_dom) {\r
- releaseChildrenDOM(true);\r
- releaseDOM();\r
- }\r
- }\r
- \r
- /**\r
- * @see XMLObject::clone()\r
- */\r
XMLObject* clone() const;\r
\r
+ void detach();\r
+\r
protected:\r
- /**\r
- * Constructor\r
- * \r
- * @param namespaceURI the namespace the element is in\r
- * @param elementLocalName the local name of the XML element this Object represents\r
- * @param namespacePrefix the namespace prefix to use\r
- */\r
- AbstractDOMCachingXMLObject(const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL)\r
- : AbstractXMLObject(namespaceURI,elementLocalName, namespacePrefix), m_dom(NULL), m_document(NULL) {}\r
+ AbstractDOMCachingXMLObject() : m_dom(NULL), m_document(NULL) {}\r
+\r
+ /** Copy constructor. */\r
+ AbstractDOMCachingXMLObject(const AbstractDOMCachingXMLObject& src)\r
+ : AbstractXMLObject(src), m_dom(NULL), m_document(NULL) {}\r
\r
/**\r
* If a DOM representation exists, this clones it into a new document.\r
*/\r
DOMElement* cloneDOM(DOMDocument* doc=NULL) const;\r
\r
- /**\r
- * A helper function for derived classes.\r
- * This 'normalizes' newString and then if it is different from oldString\r
- * invalidates the DOM. It returns the normalized value.\r
- * \r
- * @param oldValue - the current value\r
- * @param newValue - the new value\r
- * \r
- * @return the value that should be assigned\r
- */\r
- XMLCh* prepareForAssignment(const XMLCh* oldValue, const XMLCh* newValue) {\r
- XMLCh* newString = XMLString::replicate(newValue);\r
- XMLString::trim(newString);\r
-\r
- if (!XMLString::equals(oldValue,newValue))\r
- releaseThisandParentDOM();\r
- \r
- return newString;\r
- }\r
- \r
private:\r
- DOMElement* m_dom;\r
- DOMDocument* m_document;\r
+ mutable DOMElement* m_dom;\r
+ mutable DOMDocument* m_document;\r
};\r
\r
};\r