Fixed inheritance hierarchy, namespace handling
[shibboleth/cpp-xmltooling.git] / xmltooling / AbstractXMLObject.h
index b4f7788..0eeae30 100644 (file)
 \r
 #include <xmltooling/XMLObject.h>\r
 \r
-#pragma warning( push )\r
-#pragma warning( disable : 4250 4251 )\r
+#if defined (_MSC_VER)\r
+    #pragma warning( push )\r
+    #pragma warning( disable : 4250 4251 )\r
+#endif\r
 \r
 namespace xmltooling {\r
 \r
@@ -65,7 +67,9 @@ namespace xmltooling {
          * @see XMLObject::addNamespace()\r
          */\r
         void addNamespace(const Namespace& ns) {\r
-            m_namespaces.insert(ns);\r
+            if (ns.alwaysDeclare() || m_namespaces.find(ns)==m_namespaces.end()) {\r
+                m_namespaces.insert(ns);\r
+            }\r
         }\r
     \r
         /**\r
@@ -122,8 +126,10 @@ namespace xmltooling {
          * @param namespaceURI the namespace the element is in\r
          * @param elementLocalName the local name of the XML element this Object represents\r
          */\r
-        explicit AbstractXMLObject(const XMLCh* namespaceURI, const XMLCh* elementLocalName)\r
-            : m_elementQname(namespaceURI,elementLocalName), m_typeQname(NULL), m_parent(NULL) {}\r
+        AbstractXMLObject(const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL)\r
+            : m_elementQname(namespaceURI,elementLocalName, namespacePrefix), m_typeQname(NULL), m_parent(NULL) {\r
+            addNamespace(Namespace(namespaceURI, namespacePrefix));\r
+        }\r
         \r
     private:\r
         XMLObject* m_parent;\r
@@ -134,6 +140,8 @@ namespace xmltooling {
 \r
 };\r
 \r
-#pragma warning( pop )\r
+#if defined (_MSC_VER)\r
+    #pragma warning( pop )\r
+#endif\r
 \r
 #endif /* __xmltooling_abstractxmlobj_h__ */\r