diff options
author | Alan Conway <aconway@apache.org> | 2007-08-02 21:00:54 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-08-02 21:00:54 +0000 |
commit | cd6b4ba256effcf6c3e3f69a74e51d82c579e2ea (patch) | |
tree | f45ef849bb8d138c6e709464dc71e4cb502fa0cf | |
parent | 029c638fd23d3e53a58ca521209ae62057e59689 (diff) | |
download | qpid-python-cd6b4ba256effcf6c3e3f69a74e51d82c579e2ea.tar.gz |
Generate boost::variants for each class. Not yet used on trunk.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@562255 13f79535-47bb-0310-9956-ffa450edef68
-rwxr-xr-x | cpp/rubygen/cppgen.rb | 11 | ||||
-rwxr-xr-x | cpp/rubygen/generate | 2 | ||||
-rwxr-xr-x | cpp/rubygen/samples/Operations.rb | 4 | ||||
-rwxr-xr-x | cpp/rubygen/samples/Proxy.rb | 4 | ||||
-rwxr-xr-x | cpp/rubygen/templates/ClassBodyVariant.rb | 29 |
5 files changed, 40 insertions, 10 deletions
diff --git a/cpp/rubygen/cppgen.rb b/cpp/rubygen/cppgen.rb index b5f4758411..46703588c1 100755 --- a/cpp/rubygen/cppgen.rb +++ b/cpp/rubygen/cppgen.rb @@ -68,6 +68,12 @@ class AmqpMethod def body_name() @cache_body_name ||= amqp_parent.name.caps+name.caps+"Body"; end end +# Additional methods for AmqpClass +class AmqpClass + def cppname() @cache_cppname ||= name.caps; end + def body_name() @cache_body_name ||= name.caps+"Body"; end +end + # Additional methos for AmqpRoot class AmqpRoot # FIXME aconway 2007-06-20: fix u_int types, should be uint @@ -93,11 +99,6 @@ class AmqpRoot def return_type(amqptype) t=lookup(amqptype); t[2] or t[0]; end end -# Additional methods for AmqpClass -class AmqpClass - def cppname() @cache_cppname ||= name.caps; end -end - class CppGen < Generator def initialize(outdir, *specs) super(outdir,*specs) diff --git a/cpp/rubygen/generate b/cpp/rubygen/generate index 09b27211af..ce9e7afc1b 100755 --- a/cpp/rubygen/generate +++ b/cpp/rubygen/generate @@ -16,7 +16,7 @@ If OUTDIR is '-' then just prints file list without generating files. EOS exit 1 end -outdir=ARGV[0] +Outdir=ARGV[0] specs=ARGV.grep(/\.xml$/) templates=ARGV.grep(/\.rb$/) Amqp=AmqpRoot.new(*specs) diff --git a/cpp/rubygen/samples/Operations.rb b/cpp/rubygen/samples/Operations.rb index 1c245ca188..4d84e33b9f 100755 --- a/cpp/rubygen/samples/Operations.rb +++ b/cpp/rubygen/samples/Operations.rb @@ -80,6 +80,6 @@ EOS end end -OperationsGen.new("client",ARGV[0], Amqp).generate() -OperationsGen.new("server",ARGV[0], Amqp).generate() +OperationsGen.new("client",ARGV[0], amqp).generate() +OperationsGen.new("server",ARGV[0], amqp).generate() diff --git a/cpp/rubygen/samples/Proxy.rb b/cpp/rubygen/samples/Proxy.rb index f7765f3729..c63a2a9799 100755 --- a/cpp/rubygen/samples/Proxy.rb +++ b/cpp/rubygen/samples/Proxy.rb @@ -148,6 +148,6 @@ EOS end -ProxyGen.new("client", ARGV[0], Amqp).generate; -ProxyGen.new("server", ARGV[0], Amqp).generate; +ProxyGen.new("client", ARGV[0], amqp).generate; +ProxyGen.new("server", ARGV[0], amqp).generate; diff --git a/cpp/rubygen/templates/ClassBodyVariant.rb b/cpp/rubygen/templates/ClassBodyVariant.rb new file mode 100755 index 0000000000..a1dada40a5 --- /dev/null +++ b/cpp/rubygen/templates/ClassBodyVariant.rb @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +$: << ".." # Include .. in load path +require 'cppgen' + +class ClassBodyVariant < CppGen + + def initialize(outdir, amqp) + super(outdir, amqp) + end + + def class_body(c) + h_file (c.body_name) { + c.methods.each { |m| genl "#include \"#{m.body_name}.h\""; } + genl + genl "#include <boost/visitor.hpp>" + genl + gen "typedef boost::variant<" + indent { genl c.methods().collect { |m| m.body_name }.join(",\n") } + genl "> #{c.body_name};" + } + end + + def generate() + @amqp.classes.each{ |c| class_body c } + end +end + +ClassBodyVariant.new(Outdir, Amqp).generate(); + |