aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-07-04 11:30:43 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-07-04 11:30:43 +0200
commit9d4a4dd3aedc0b30a55e4013b18cdb6439a9b422 (patch)
treef8c7d26ac758200731bc0c0742078b801bbd17b9
parent612b94596ad38263464c27da26a7186e7c22cca9 (diff)
Add --std option that specified C++ standard
-rw-r--r--NEWS3
-rw-r--r--xsd/cxx/option-types.cxx49
-rw-r--r--xsd/cxx/option-types.hxx36
-rw-r--r--xsd/cxx/options.cli11
-rw-r--r--xsd/makefile3
5 files changed, 101 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 5c60e5c..61477a5 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,8 @@
Version 4.0.0
+ * New option, --std, specifies the C++ standard that the generated code
+ should conform to. Valid values are c++98 (default) and c++11.
+
* New option, --fat-type-file, triggers the generation of code
corresponding to global elements into type files instead of schema
files in the file-per-type mode. This option is primarily useful
diff --git a/xsd/cxx/option-types.cxx b/xsd/cxx/option-types.cxx
new file mode 100644
index 0000000..4dc2aef
--- /dev/null
+++ b/xsd/cxx/option-types.cxx
@@ -0,0 +1,49 @@
+// file : xsd/cxx/option-types.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <istream>
+#include <ostream>
+
+#include <cxx/option-types.hxx>
+
+using namespace std;
+
+namespace CXX
+{
+ //
+ // cxx_version
+ //
+
+ static const char* cxx_version_[] =
+ {
+ "c++98",
+ "c++11"
+ };
+
+ string cxx_version::
+ string () const
+ {
+ return cxx_version_[v_];
+ }
+
+ istream&
+ operator>> (istream& is, cxx_version& v)
+ {
+ string s;
+ is >> s;
+
+ if (!is.fail ())
+ {
+ if (s == "c++98")
+ v = cxx_version::cxx98;
+ else if (s == "c++11")
+ v = cxx_version::cxx11;
+ else
+ is.setstate (istream::failbit);
+ }
+
+ return is;
+ }
+}
diff --git a/xsd/cxx/option-types.hxx b/xsd/cxx/option-types.hxx
new file mode 100644
index 0000000..13aa363
--- /dev/null
+++ b/xsd/cxx/option-types.hxx
@@ -0,0 +1,36 @@
+// file : xsd/cxx/option-types.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_OPTION_TYPES_HXX
+#define XSD_OPTION_TYPES_HXX
+
+#include <iosfwd>
+#include <string>
+
+namespace CXX
+{
+ struct cxx_version
+ {
+ enum value
+ {
+ cxx98,
+ cxx11
+ };
+
+ cxx_version (value v = value (0)) : v_ (v) {}
+ operator value () const {return v_;}
+
+ std::string
+ string () const;
+
+ private:
+ value v_;
+ };
+
+ std::istream&
+ operator>> (std::istream&, cxx_version&);
+}
+
+#endif // XSD_OPTION_TYPES_HXX
diff --git a/xsd/cxx/options.cli b/xsd/cxx/options.cli
index e1b48e9..2203188 100644
--- a/xsd/cxx/options.cli
+++ b/xsd/cxx/options.cli
@@ -7,12 +7,23 @@ include <cstddef>; // std::size_t
include <types.hxx>; // NarrowString, NarrowStrings
+include <cxx/option-types.hxx>;
+
include <options.cli>;
namespace CXX
{
class options: ::options = 0
{
+ // Language.
+ //
+ cxx_version --std = cxx_version::cxx98
+ {
+ "<version>",
+ "Specify the C++ standard that the generated code should conform to.
+ Valid values are \cb{c++98} (default) and \cb{c++11}."
+ };
+
// Character type and encoding.
//
NarrowString --char-type = "char"
diff --git a/xsd/makefile b/xsd/makefile
index e80df26..6726f26 100644
--- a/xsd/makefile
+++ b/xsd/makefile
@@ -8,7 +8,8 @@ include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make
cxx_tun := xsd.cxx
cxx_tun += cxx/elements.cxx \
- cxx/literal-map.cxx
+ cxx/literal-map.cxx \
+ cxx/option-types.cxx
cxx_tun += cxx/parser/elements.cxx \
cxx/parser/validator.cxx \