diff options
| author | Alan Conway <aconway@apache.org> | 2008-02-27 16:37:48 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2008-02-27 16:37:48 +0000 |
| commit | 0731e05211ff5e47e6a8b2c006bd6012da5cc161 (patch) | |
| tree | c30b793e7db0471caf9cc9b2226fdf20a353c8f9 /cpp/rubygen/templates/OperationsInvoker.rb | |
| parent | 178e1ad48948e5818ee3922cb73e515f581557d6 (diff) | |
| download | qpid-python-0731e05211ff5e47e6a8b2c006bd6012da5cc161.tar.gz | |
Generate code for both 0-99 preview and 0-10 final specs .
0-10 final: extended code generation and non-generated support classes.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@631638 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/rubygen/templates/OperationsInvoker.rb')
| -rwxr-xr-x | cpp/rubygen/templates/OperationsInvoker.rb | 92 |
1 files changed, 0 insertions, 92 deletions
diff --git a/cpp/rubygen/templates/OperationsInvoker.rb b/cpp/rubygen/templates/OperationsInvoker.rb deleted file mode 100755 index 747dd06189..0000000000 --- a/cpp/rubygen/templates/OperationsInvoker.rb +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env ruby -# Usage: output_directory xml_spec_file [xml_spec_file...] -# -$: << '..' -require 'cppgen' - -class OperationsInvokerGen < CppGen - def initialize(chassis, outdir, amqp) - super(outdir, amqp) - @chassis=chassis - @ops="AMQP_#{@chassis.caps}Operations" - @classname="#{@ops}::Invoker" - @filename="qpid/framing/#{@chassis.caps}Invoker" - end - - def handler(c) "#{@ops}::#{c.cppname}Handler"; end - def getter(c) "get#{c.cppname}Handler"; end - def invoker(c) "#{handler(c)}::Invoker"; end - def visit_methods(c) c.methods_on(@chassis).select { |m| !m.content } end - - def handler_visits_cpp(c) - visit_methods(c).each { |m| - scope("void #{invoker(c)}::visit(const #{m.body_name}& body) {") { - if (m.result) - genl "this->encode(body.invoke(target), result.result);" - else - genl "body.invoke(target);" - end - genl "result.handled=true;" - } - } - end - - def ops_visits_cpp() - @amqp.classes.each { |c| - visit_methods(c).each { |m| - scope("void #{@classname}::visit(const #{m.body_name}& body) {") { - genl "#{handler(c)}::Invoker invoker(*target.#{getter(c)}());" - genl "body.accept(invoker);" - genl "result=invoker.getResult();" - } - } - } - end - - def invoker_h(invoker, target, methods) - return if methods.empty? - genl - cpp_class(invoker, "public qpid::framing::Invoker") { - genl "#{target}& target;" - public - genl("Invoker(#{target}& target_) : target(target_) {}") - genl "using MethodBodyDefaultVisitor::visit;" - methods.each { |m| genl "void visit(const #{m.body_name}& body);" } - } - end - - def generate() - h_file(@filename) { - include "qpid/framing/#{@ops}" - include "qpid/framing/Invoker.h" - namespace("qpid::framing") { - # AMQP_*Operations invoker. - methods=@amqp.classes.map { |c| visit_methods(c).to_a }.flatten - invoker_h(@classname, @ops, methods) - - # AMQP_*Operations::*Handler invokers. - @amqp.classes.each { |c| - invoker_h(invoker(c), handler(c), visit_methods(c)) - } - } - } - - cpp_file(@filename) { - include @filename - @amqp.classes.each { |c| - visit_methods(c).each { |m| - include "qpid/framing/#{m.body_name}" - }} - namespace("qpid::framing") { - ops_visits_cpp - @amqp.classes.each { |c| - next if visit_methods(c).empty? - handler_visits_cpp(c) - } - } - } - end -end - -OperationsInvokerGen.new("client",ARGV[0], Amqp).generate() -OperationsInvokerGen.new("server",ARGV[0], Amqp).generate() |
