summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2009-09-20 18:49:54 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2009-09-20 18:49:54 +0200
commitb3ab9d53c47ad5f7c35ac12b2577c589cf4e0d20 (patch)
tree69a657701e3594c509ff089e75fcf2f94d2c32ff /cli
parent0804aa8543136f3e1585e0e59a14f9c331c0c448 (diff)
Generate classes, accessors and data members
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);
}