From b3ab9d53c47ad5f7c35ac12b2577c589cf4e0d20 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 20 Sep 2009 18:49:54 +0200 Subject: Generate classes, accessors and data members --- cli/header.cxx | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) (limited to 'cli') 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); } -- cgit v1.1