diff options
Diffstat (limited to 'xsde/cxx/parser/parser-header.cxx')
-rw-r--r-- | xsde/cxx/parser/parser-header.cxx | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/xsde/cxx/parser/parser-header.cxx b/xsde/cxx/parser/parser-header.cxx index 34f2119..5bc9cb7 100644 --- a/xsde/cxx/parser/parser-header.cxx +++ b/xsde/cxx/parser/parser-header.cxx @@ -28,6 +28,13 @@ namespace CXX SemanticGraph::Type& base (e.inherits ().base ()); String fq_base (fq_name (base)); + Boolean facets (false); // Whether we need to set facets. + if (validation) + { + StringBasedType t (facets); + t.dispatch (e); + } + os << "class " << name << ": public " << (mixin ? "virtual " : "") << fq_base << "{" @@ -60,15 +67,22 @@ namespace CXX << "_dynamic_type () const;"; } - if (tiein) + if (facets || tiein) { os << endl << "// Constructor." << endl - << "//" << endl - << name << " (" << fq_base << "* tiein);" - << endl; + << "//" << endl; - os << "// Implementation details." << endl + if (tiein) + os << name << " (" << fq_base << "* tiein);"; + else + os << name << " ();"; + } + + if (tiein) + { + os << endl + << "// Implementation details." << endl << "//" << endl; // If our base has pure virtual post, override it here. @@ -87,6 +101,20 @@ namespace CXX << name << " (" << name << "*, void*);"; } + if (facets) + { + UnsignedLong enum_count (0); + + for (Type::NamesIterator i (e.names_begin ()), end (e.names_end ()); + i != end; ++i) + ++enum_count; + + os << endl + << "protected:" << endl + << "static const char* const _xsde_" << name << "_enums_[" << + enum_count << "UL];"; + } + os << "};"; } }; |