Some root interfaces and configuration machinery
[shibboleth/cpp-xmltooling.git] / xmltooling / QName.cpp
diff --git a/xmltooling/QName.cpp b/xmltooling/QName.cpp
new file mode 100644 (file)
index 0000000..abf3c87
--- /dev/null
@@ -0,0 +1,121 @@
+/*\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
+/**\r
+ * @file QName.cpp\r
+ * \r
+ * Representing XML QNames \r
+ */\r
+\r
+#include "internal.h"\r
+#include "QName.h"\r
+\r
+using namespace xmltooling;\r
+\r
+QName::QName(const XMLCh* uri, const XMLCh* localPart, const XMLCh* prefix)\r
+{\r
+#ifndef HAVE_GOOD_STL\r
+    m_uri=m_prefix=m_local=NULL;\r
+#endif\r
+    setNamespaceURI(uri);\r
+    setLocalPart(localPart);\r
+    setPrefix(prefix);\r
+}\r
+\r
+QName::~QName()\r
+{\r
+#ifndef HAVE_GOOD_STL\r
+    XMLString::release(&m_uri);\r
+    XMLString::release(&m_prefix);\r
+    XMLString::release(&m_local);\r
+#endif\r
+}\r
+\r
+void QName::setPrefix(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 QName::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
+void QName::setLocalPart(const XMLCh* localPart)\r
+{\r
+#ifdef HAVE_GOOD_STL\r
+    if (localPart)\r
+        m_local=localPart;\r
+    else\r
+        m_local.erase();\r
+#else\r
+    if (m_local)\r
+        XMLString::release(&m_local);\r
+    m_local=XMLString::replicate(localPart);\r
+#endif\r
+}\r
+\r
+#ifndef HAVE_GOOD_STL\r
+QName::QName(const QName& src)\r
+{\r
+    m_uri=XMLString::replicate(src.getNamespaceURI());\r
+    m_prefix=XMLString::replicate(src.getPrefix());\r
+    m_local=XMLString::replicate(src.getLocalPart());\r
+}\r
+\r
+QName& QName::operator=(const QName& src)\r
+{\r
+    m_uri=XMLString::replicate(src.getNamespaceURI());\r
+    m_prefix=XMLString::replicate(src.getPrefix());\r
+    m_local=XMLString::replicate(src.getLocalPart());\r
+    return *this;\r
+}\r
+\r
+bool xmltooling::operator==(const QName& op1, const QName& op2)\r
+{\r
+    return (!XMLString::compareString(op1.getNamespaceURI(),op2.getNamespaceURI()) &&\r
+            !XMLString::compareString(op1.getLocalPart(),op2.getLocalPart()));\r
+}\r
+#endif\r
+\r
+bool xmltooling::operator<(const QName& op1, const QName& 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.getLocalPart(),op2.getLocalPart())<0);\r
+    else\r
+        return false;\r
+}\r