aboutsummaryrefslogtreecommitdiff
path: root/xml/value-traits
diff options
context:
space:
mode:
Diffstat (limited to 'xml/value-traits')
-rw-r--r--xml/value-traits53
1 files changed, 53 insertions, 0 deletions
diff --git a/xml/value-traits b/xml/value-traits
new file mode 100644
index 0000000..3bf10e0
--- /dev/null
+++ b/xml/value-traits
@@ -0,0 +1,53 @@
+// file : xml/value-traits -*- C++ -*-
+// copyright : Copyright (c) 2013-2014 Code Synthesis Tools CC
+// license : MIT; see accompanying LICENSE file
+
+#ifndef XML_VALUE_TRAITS
+#define XML_VALUE_TRAITS
+
+#include <xml/details/pre.hxx>
+
+#include <string>
+#include <cstddef> // std::size_t
+
+#include <xml/forward>
+
+#include <xml/details/export.hxx>
+
+namespace xml
+{
+ template <typename T>
+ struct default_value_traits
+ {
+ static T
+ parse (std::string, const parser&);
+
+ static std::string
+ serialize (const T&, const serializer&);
+ };
+
+ template <>
+ struct LIBSTUDXML_EXPORT default_value_traits<bool>
+ {
+ static bool
+ parse (std::string, const parser&);
+
+ static std::string
+ serialize (bool v, const serializer&)
+ {
+ return v ? "true" : "false";
+ }
+ };
+
+ template <typename T>
+ struct value_traits: default_value_traits<T> {};
+
+ template <typename T, std::size_t N>
+ struct value_traits<T[N]>: default_value_traits<const T*> {};
+}
+
+#include <xml/value-traits.txx>
+
+#include <xml/details/post.hxx>
+
+#endif // XML_VALUE_TRAITS