diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2009-09-20 18:49:54 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2009-09-20 18:49:54 +0200 |
commit | b3ab9d53c47ad5f7c35ac12b2577c589cf4e0d20 (patch) | |
tree | 69a657701e3594c509ff089e75fcf2f94d2c32ff /cli/header.cxx | |
parent | 0804aa8543136f3e1585e0e59a14f9c331c0c448 (diff) |
Generate classes, accessors and data members
Diffstat (limited to 'cli/header.cxx')
-rw-r--r-- | cli/header.cxx | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/cli/header.cxx b/cli/header.cxx index 21f70f2..c248690 100644 --- a/cli/header.cxx +++ b/cli/header.cxx @@ -7,6 +7,80 @@ namespace { + // + // + struct option: traversal::option, context + { + option (context& c) : context (c) {} + + virtual void + traverse (type& o) + { + string name (ename (o)); + string type (o.type ().name ()); + + os << type << " const&" << endl + << name << " () const;" + << endl; + } + }; + + struct option_data: traversal::option, context + { + option_data (context& c) : context (c) {} + + virtual void + traverse (type& o) + { + string member (emember (o)); + string type (o.type ().name ()); + + os << type << " " << member << ";"; + } + }; + + // + // + struct class_: traversal::class_, context + { + class_ (context& c) + : context (c), + option_ (c), + option_data_ (c) + { + names_option_ >> option_; + names_option_data_ >> option_data_; + } + + virtual void + traverse (type& c) + { + string name (escape (c.name ())); + + os << "class " << name + << "{" + << "public:" << endl + << endl; + + names (c, names_option_); + + os << "private:" << endl; + + names (c, names_option_data_); + + os << "};"; + } + + private: + option option_; + traversal::names names_option_; + + option_data option_data_; + traversal::names names_option_data_; + }; + + // + // struct includes: traversal::cxx_includes, context { includes (context& c) : context (c) {} @@ -28,9 +102,11 @@ generate_header (context& ctx) traversal::names unit_names; namespace_ ns (ctx); traversal::names ns_names; + class_ cl (ctx); unit >> includes; unit >> unit_names >> ns >> ns_names >> ns; + ns_names >> cl; unit.dispatch (ctx.unit); } |