summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/header.cxx76
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);
}