summaryrefslogtreecommitdiff
path: root/libcutl/cutl/xml/qname.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libcutl/cutl/xml/qname.hxx')
-rw-r--r--libcutl/cutl/xml/qname.hxx79
1 files changed, 79 insertions, 0 deletions
diff --git a/libcutl/cutl/xml/qname.hxx b/libcutl/cutl/xml/qname.hxx
new file mode 100644
index 0000000..0964705
--- /dev/null
+++ b/libcutl/cutl/xml/qname.hxx
@@ -0,0 +1,79 @@
+// file : cutl/xml/qname.hxx
+// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC
+// license : MIT; see accompanying LICENSE file
+
+#ifndef CUTL_XML_QNAME_HXX
+#define CUTL_XML_QNAME_HXX
+
+#include <string>
+#include <iosfwd>
+
+#include <cutl/details/export.hxx>
+
+namespace cutl
+{
+ namespace xml
+ {
+ // Note that the optional prefix is just a "syntactic sugar". In
+ // particular, it is ignored by the comparison operators and the
+ // std::ostream insertion operator.
+ //
+ class LIBCUTL_EXPORT qname
+ {
+ public:
+ qname () {}
+ qname (const std::string& name): name_ (name) {}
+ qname (const std::string& ns, const std::string& name)
+ : ns_ (ns), name_ (name) {}
+ qname (const std::string& ns,
+ const std::string& name,
+ const std::string& prefix)
+ : ns_ (ns), name_ (name), prefix_ (prefix) {}
+
+ const std::string& namespace_ () const {return ns_;}
+ const std::string& name () const {return name_;}
+ const std::string& prefix () const {return prefix_;}
+
+ std::string& namespace_ () {return ns_;}
+ std::string& name () {return name_;}
+ std::string& prefix () {return prefix_;}
+
+ // Printable representation in the [<namespace>#]<name> form.
+ //
+ std::string
+ string () const;
+
+ // Note that comparison operators
+ //
+ public:
+ friend bool
+ operator< (const qname& x, const qname& y)
+ {
+ return x.ns_ < y.ns_ || (x.ns_ == y.ns_ && x.name_ < y.name_);
+ }
+
+ friend bool
+ operator== (const qname& x, const qname& y)
+ {
+ return x.ns_ == y.ns_ && x.name_ == y.name_;
+ }
+
+ friend bool
+ operator!= (const qname& x, const qname& y)
+ {
+ return !(x == y);
+ }
+
+ private:
+ std::string ns_;
+ std::string name_;
+ std::string prefix_;
+ };
+
+ LIBCUTL_EXPORT
+ std::ostream&
+ operator<< (std::ostream&, const qname&);
+ }
+}
+
+#endif // CUTL_XML_QNAME_HXX