diff options
Diffstat (limited to 'xsd/xsd/cxx/tree/tree-inline.cxx')
-rw-r--r-- | xsd/xsd/cxx/tree/tree-inline.cxx | 172 |
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); |