class XMLTOOL_API AbstractXMLObject : public virtual XMLObject\r
{\r
public:\r
- virtual ~AbstractXMLObject() {\r
- delete m_typeQname;\r
- }\r
+ virtual ~AbstractXMLObject();\r
\r
/**\r
* @see XMLObject::getElementQName()\r
/**\r
* @see XMLObject::addNamespace()\r
*/\r
- void addNamespace(const Namespace& ns) {\r
- m_namespaces.insert(ns);\r
+ void addNamespace(const Namespace& ns) const {\r
+ if (ns.alwaysDeclare() || m_namespaces.find(ns)==m_namespaces.end()) {\r
+ m_namespaces.insert(ns);\r
+ }\r
}\r
\r
/**\r
void setParent(XMLObject* parent) {\r
m_parent = parent;\r
}\r
- \r
- protected:\r
- AbstractXMLObject() : m_typeQname(NULL), m_parent(NULL) {}\r
\r
/**\r
+ * @see XMLObject::hasChildren()\r
+ */\r
+ bool hasChildren() const {\r
+ return !m_children.empty();\r
+ }\r
+\r
+ /**\r
+ * @see XMLObject::getOrderedChildren()\r
+ */\r
+ const std::list<XMLObject*>& getOrderedChildren() const {\r
+ return m_children;\r
+ }\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
- AbstractXMLObject(const XMLCh* namespaceURI, const XMLCh* elementLocalName)\r
- : m_elementQname(namespaceURI,elementLocalName), m_typeQname(NULL), m_parent(NULL) {}\r
- \r
+ AbstractXMLObject(const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL);\r
+\r
+ /**\r
+ * Underlying list of child objects.\r
+ * Manages the lifetime of the children.\r
+ */\r
+ std::list<XMLObject*> m_children;\r
+\r
+ /**\r
+ * Set of namespaces associated with the object.\r
+ */\r
+ mutable std::set<Namespace> m_namespaces;\r
+\r
+ /**\r
+ * Logging object.\r
+ */\r
+ void* m_log;\r
+\r
private:\r
XMLObject* m_parent;\r
QName m_elementQname;\r
QName* m_typeQname;\r
- std::set<Namespace> m_namespaces;\r
};\r
\r
};\r