summaryrefslogtreecommitdiff
path: root/xsd/xsd/cxx/tree/tree-inline.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsd/xsd/cxx/tree/tree-inline.cxx')
-rw-r--r--xsd/xsd/cxx/tree/tree-inline.cxx172
1 files changed, 133 insertions, 39 deletions
diff --git a/xsd/xsd/cxx/tree/tree-inline.cxx b/xsd/xsd/cxx/tree/tree-inline.cxx
index 5bf309b..500ee73 100644
--- a/xsd/xsd/cxx/tree/tree-inline.cxx
+++ b/xsd/xsd/cxx/tree/tree-inline.cxx
@@ -1,6 +1,5 @@
// file : xsd/cxx/tree/tree-inline.cxx
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsd-frontend/semantic-graph.hxx>
@@ -22,7 +21,7 @@ namespace CXX
{
}
- virtual Void
+ virtual void
traverse (Type& l)
{
String name (ename (l));
@@ -54,7 +53,7 @@ namespace CXX
os << inl
<< name << "::" << endl
<< name << " ()" << endl
- << ": " << base_type << " ( " << flags_type << " (0), this)"
+ << ": " << base_type << " (this)"
<< "{"
<< "}";
@@ -83,6 +82,28 @@ namespace CXX
<< " " << base_type << " (o, f, this)"
<< "{"
<< "}";
+
+ // Comparison operators.
+ //
+ if (options.generate_comparison ())
+ {
+ os << inl
+ << "bool" << endl
+ << "operator== (const " << name << "& x, " <<
+ "const " << name << "& y)"
+ << "{"
+ << "const " << base_type << "& bx (x);"
+ << "return bx == y;"
+ << "}";
+
+ os << inl
+ << "bool" << endl
+ << "operator!= (const " << name << "& x, " <<
+ "const " << name << "& y)"
+ << "{"
+ << "return !(x == y);"
+ << "}";
+ }
}
private:
@@ -106,7 +127,7 @@ namespace CXX
{
}
- virtual Void
+ virtual void
traverse (Type& u)
{
String name (ename (u));
@@ -123,7 +144,7 @@ namespace CXX
<< "//" << endl
<< endl;
- if (options.value<CLI::generate_default_ctor> ())
+ if (options.generate_default_ctor ())
{
// c-tor ()
//
@@ -182,7 +203,7 @@ namespace CXX
{
}
- virtual Void
+ virtual void
traverse (SemanticGraph::Complex& c)
{
// This type should be ultimately string based.
@@ -196,7 +217,7 @@ namespace CXX
os << ")";
}
- virtual Void
+ virtual void
traverse (SemanticGraph::Fundamental::Type& t)
{
base_type_name_.dispatch (t);
@@ -217,7 +238,7 @@ namespace CXX
inherits_member_ >> member_;
}
- virtual Void
+ virtual void
traverse (Type& e)
{
String name (ename (e));
@@ -228,13 +249,13 @@ namespace CXX
if (renamed_type (e, name) && !name)
return;
- Boolean string_based (false);
+ bool string_based (false);
{
IsStringBasedType t (string_based);
t.dispatch (e);
}
- Boolean enum_based (false);
+ bool enum_based (false);
if (string_based)
{
SemanticGraph::Enumeration* be (0);
@@ -250,7 +271,7 @@ namespace CXX
// Get to the ultimate base and see if is a fundamental type.
//
- Boolean fund_based (false);
+ bool fund_based (false);
SemanticGraph::Type& ult_base (ultimate_base (e));
{
IsFundamentalType t (fund_based);
@@ -276,7 +297,7 @@ namespace CXX
// default c-tor
//
- if (options.value<CLI::generate_default_ctor> ())
+ if (options.generate_default_ctor ())
{
os << inl
<< name << "::" << endl
@@ -427,7 +448,7 @@ namespace CXX
{
}
- virtual Void
+ virtual void
traverse (Type& m)
{
if (skip (m))
@@ -437,13 +458,13 @@ namespace CXX
String const& mname (emname (m));
String const& member (emember (m));
- Boolean fund (false);
+ bool fund (false);
{
IsFundamentalType t (fund);
t.dispatch (m.type ());
}
- Boolean def_attr (m.default_p () &&
+ bool def_attr (m.default_p () &&
m.is_a<SemanticGraph::Attribute> ());
if (max (m) != 1)
@@ -537,9 +558,10 @@ namespace CXX
if (!fund)
os << inl
<< "void " << scope_ << "::" << endl
- << mname << " (::std::auto_ptr< " << type << " > x)"
+ << mname << " (" << auto_ptr << "< " << type << " > x)"
<< "{"
- << "this->" << member << ".set (x);"
+ << "this->" << member << ".set (" <<
+ (std >= cxx_version::cxx11 ? "std::move (x)" : "x") << ");"
<< "}";
}
else
@@ -589,9 +611,10 @@ namespace CXX
if (!fund)
os << inl
<< "void " << scope_ << "::" << endl
- << mname << " (::std::auto_ptr< " << type << " > x)"
+ << mname << " (" << auto_ptr << "< " << type << " > x)"
<< "{"
- << "this->" << member << ".set (x);"
+ << "this->" << member << ".set (" <<
+ (std >= cxx_version::cxx11 ? "std::move (x)" : "x") << ");"
<< "}";
// auto_ptr<type>
@@ -599,7 +622,7 @@ namespace CXX
//
if (detach && !fund)
os << inl
- << "::std::auto_ptr< " << q_type << " > " <<
+ << auto_ptr << "< " << q_type << " > " <<
scope_ << "::" << endl
<< edname (m) << " ()"
<< "{"
@@ -613,7 +636,7 @@ namespace CXX
//
if (m.default_p ())
{
- Boolean simple (true);
+ bool simple (true);
if (m.is_a<SemanticGraph::Element> ())
{
@@ -660,7 +683,7 @@ namespace CXX
{
}
- virtual Void
+ virtual void
traverse (SemanticGraph::Any& a)
{
String const& aname (eaname (a));
@@ -810,7 +833,7 @@ namespace CXX
}
}
- virtual Void
+ virtual void
traverse (SemanticGraph::AnyAttribute& a)
{
String const& aname (eaname (a));
@@ -862,7 +885,7 @@ namespace CXX
{
}
- virtual Void
+ virtual void
traverse (Type& c)
{
String name (ename (c));
@@ -883,13 +906,48 @@ namespace CXX
Member member (*this, name);
Traversal::Names names;
- if (options.value<CLI::generate_wildcard> ())
+ if (options.generate_wildcard ())
names >> any;
names >> member;
Complex::names (c, names);
+ // Mixed text content.
+ //
+ if (mixed_p (c) && !c.context ().count ("mixed-in-base"))
+ {
+ SemanticGraph::Context& ctx (c.context ());
+
+ String const& cont (ctx.get<String> ("mixed-container"));
+ String const& memb (ctx.get<String> ("mixed-member"));
+
+ String const& aname (ctx.get<String> ("mixed-aname"));
+ String const& mname (ctx.get<String> ("mixed-mname"));
+
+ os << inl
+ << "const " << name << "::" << cont << "& " <<
+ name << "::" << endl
+ << aname << " () const"
+ << "{"
+ << "return this->" << memb << ";"
+ << "}";
+
+ os << inl
+ << name << "::" << cont << "& " << name << "::" << endl
+ << aname << " ()"
+ << "{"
+ << "return this->" << memb << ";"
+ << "}";
+
+ os << inl
+ << "void " << name << "::" << endl
+ << mname << " (const " << cont << "& s)"
+ << "{"
+ << "this->" << memb << " = s;"
+ << "}";
+ }
+
// dom_document accessors.
//
if (edom_document_member_p (c))
@@ -899,14 +957,49 @@ namespace CXX
name << "::" << endl
<< edom_document (c) << " () const"
<< "{"
- << "return *" << edom_document_member (c) << ";"
+ << "return *this->" << edom_document_member (c) << ";"
<< "}";
os << inl
<< xerces_ns << "::DOMDocument& " << name << "::" << endl
<< edom_document (c) << " ()"
<< "{"
- << "return *" << edom_document_member (c) << ";"
+ << "return *this->" << edom_document_member (c) << ";"
+ << "}";
+ }
+
+ // Order container.
+ //
+ if (ordered_p (c) && !c.context ().count ("order-in-base"))
+ {
+ SemanticGraph::Context& ctx (c.context ());
+
+ String const& cont (ctx.get<String> ("order-container"));
+ String const& memb (ctx.get<String> ("order-member"));
+
+ String const& aname (ctx.get<String> ("order-aname"));
+ String const& mname (ctx.get<String> ("order-mname"));
+
+ os << inl
+ << "const " << name << "::" << cont << "& " <<
+ name << "::" << endl
+ << aname << " () const"
+ << "{"
+ << "return this->" << memb << ";"
+ << "}";
+
+ os << inl
+ << name << "::" << cont << "& " << name << "::" << endl
+ << aname << " ()"
+ << "{"
+ << "return this->" << memb << ";"
+ << "}";
+
+ os << inl
+ << "void " << name << "::" << endl
+ << mname << " (const " << cont << "& s)"
+ << "{"
+ << "this->" << memb << " = s;"
<< "}";
}
@@ -924,13 +1017,13 @@ namespace CXX
{
}
- virtual Void
+ virtual void
traverse (Type& e)
{
if (!doc_root_p (e))
return;
- Boolean fund (false);
+ bool fund (false);
{
IsFundamentalType test (fund);
test.dispatch (e.type ());
@@ -976,7 +1069,7 @@ namespace CXX
<< "void " << name << "::" << endl
<< mname << " (const " << type << "& x)"
<< "{"
- << "return this->" << member << ".set (x);"
+ << "this->" << member << ".set (x);"
<< "}";
// void
@@ -986,9 +1079,10 @@ namespace CXX
{
os << inl
<< "void " << name << "::" << endl
- << mname << " (::std::auto_ptr< " << type << " > p)"
+ << mname << " (" << auto_ptr << "< " << type << " > x)"
<< "{"
- << "return this->" << member << ".set (p);"
+ << "this->" << member << ".set (" <<
+ (std >= cxx_version::cxx11 ? "std::move (x)" : "x") << ");"
<< "}";
}
@@ -997,7 +1091,7 @@ namespace CXX
//
if (detach && !fund)
os << inl
- << "::std::auto_ptr< " << name << "::" << type << " > " <<
+ << auto_ptr << "< " << name << "::" << type << " > " <<
name << "::" << endl
<< edname (e) << " ()"
<< "{"
@@ -1007,12 +1101,12 @@ namespace CXX
};
}
- Void
- generate_tree_inline (Context& ctx, UnsignedLong first, UnsignedLong last)
+ void
+ generate_tree_inline (Context& ctx, size_t first, size_t last)
{
// Generate includes.
//
- if (ctx.options.value<CLI::generate_inline> ())
+ if (ctx.options.generate_inline ())
{
Traversal::Schema schema;
Includes includes (ctx, Includes::inline_);
@@ -1035,7 +1129,7 @@ namespace CXX
}
Traversal::Schema schema;
- Traversal::Sources sources;
+ Sources sources;
Traversal::Names names_ns, names;
Namespace ns (ctx, first, last);
@@ -1053,7 +1147,7 @@ namespace CXX
names >> complex;
names >> enumeration;
- if (ctx.options.value<CLI::generate_element_type> ())
+ if (ctx.options.generate_element_type ())
names >> element;
schema.dispatch (ctx.schema_root);