Initial check-in
[shibboleth/cpp-xmltooling.git] / xmltooling / Namespace.cpp
diff --git a/xmltooling/Namespace.cpp b/xmltooling/Namespace.cpp
new file mode 100644 (file)
index 0000000..0d7a3f2
--- /dev/null
@@ -0,0 +1,110 @@
+/*\r
+ *  Copyright 2001-2006 Internet2\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *     http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/* Namespace.cpp\r
+ * \r
+ * Data structure for representing XML namespace attributes \r
+ * \r
+ * $Id:$\r
+ */\r
+\r
+#include "internal.h"\r
+#include "unicode.h"\r
+#include "Namespace.h"\r
+\r
+using namespace std;\r
+using namespace xmltooling;\r
+\r
+Namespace::Namespace()\r
+{\r
+#ifndef HAVE_GOOD_STL\r
+    m_uri=m_prefix=NULL;\r
+#endif\r
+}\r
+\r
+Namespace::Namespace(const XMLCh* uri, const XMLCh* prefix)\r
+{\r
+    setNamespaceURI(uri);\r
+    setNamespacePrefix(prefix);\r
+}\r
+\r
+Namespace::~Namespace()\r
+{\r
+#ifndef HAVE_GOOD_STL\r
+    XMLString::release(&m_uri);\r
+    XMLString::release(&m_prefix);\r
+#endif\r
+}\r
+\r
+void Namespace::setNamespacePrefix(const XMLCh* prefix)\r
+{\r
+#ifdef HAVE_GOOD_STL\r
+    if (prefix)\r
+        m_prefix=prefix;\r
+    else\r
+        m_prefix.erase();\r
+#else\r
+    if (m_prefix)\r
+        XMLString::release(&m_prefix);\r
+    m_prefix=XMLString::replicate(prefix);\r
+#endif\r
+}\r
+\r
+void Namespace::setNamespaceURI(const XMLCh* uri)\r
+{\r
+#ifdef HAVE_GOOD_STL\r
+    if (uri)\r
+        m_uri=uri;\r
+    else\r
+        m_uri.erase();\r
+#else\r
+    if (m_uri)\r
+        XMLString::release(&m_uri);\r
+    m_uri=XMLString::replicate(uri);\r
+#endif\r
+}\r
+\r
+#ifndef HAVE_GOOD_STL\r
+Namespace::Namespace(const Namespace& src)\r
+{\r
+    m_uri=XMLString::replicate(src.getNamespaceURI());\r
+    m_prefix=XMLString::replicate(src.getNamespacePrefix());\r
+}\r
+\r
+Namespace& Namespace::operator=(const Namespace& src)\r
+{\r
+    m_uri=XMLString::replicate(src.getNamespaceURI());\r
+    m_prefix=XMLString::replicate(src.getNamespacePrefix());\r
+    return *this;\r
+}\r
+\r
+bool xmltooling::operator==(const Namespace& op1, const Namespace& op2)\r
+{\r
+    return (!XMLString::compareString(op1.getNamespaceURI(),op2.getNamespaceURI()) &&\r
+            !XMLString::compareString(op1.getNamespacePrefix(),op2.getNamespacePrefix()));\r
+}\r
+#endif\r
+\r
+bool xmltooling::operator<(const Namespace& op1, const Namespace& op2)\r
+{\r
+    int i=XMLString::compareString(op1.getNamespaceURI(),op2.getNamespaceURI());\r
+    if (i<0)\r
+        return true;\r
+    else if (i==0)\r
+        return (XMLString::compareString(op1.getNamespacePrefix(),op2.getNamespacePrefix())<0);\r
+    else\r
+        return false;\r
+}\r