From ba57e373864d44cfae17ec8c2c9de7a55f0b4113 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Thu, 9 Aug 2007 00:03:43 +0000 Subject: Moved Proxy generation to rubygen. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@564051 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/rubygen/amqpgen.rb | 6 +- cpp/rubygen/cppgen.rb | 6 +- cpp/rubygen/samples/Proxy.rb | 153 ----------------------------------------- cpp/rubygen/templates/Proxy.rb | 141 +++++++++++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+), 158 deletions(-) delete mode 100755 cpp/rubygen/samples/Proxy.rb create mode 100755 cpp/rubygen/templates/Proxy.rb (limited to 'cpp/rubygen') diff --git a/cpp/rubygen/amqpgen.rb b/cpp/rubygen/amqpgen.rb index 31f7544011..ae8e4c5d1c 100755 --- a/cpp/rubygen/amqpgen.rb +++ b/cpp/rubygen/amqpgen.rb @@ -114,7 +114,8 @@ class AmqpClass < AmqpElement # chassis should be "client" or "server" def methods_on(chassis) - elements.collect("method/chassis[@name='#{chassis}']/..") { |m| + @cache_methods_on ||= { } + @cache_methods_on[chassis] ||= elements.collect("method/chassis[@name='#{chassis}']/..") { |m| AmqpMethod.new(m,self) }.sort_by_name end @@ -147,7 +148,8 @@ class AmqpRoot < AmqpElement # Return all methods on chassis for all classes. def methods_on(chassis) - classes.collect { |c| c.methods_on(chassis) }.flatten + @cache_methods_on ||= { } + @cache_methods_on[chassis] ||= classes.collect { |c| c.methods_on(chassis) }.flatten end # Merge contents of elements. diff --git a/cpp/rubygen/cppgen.rb b/cpp/rubygen/cppgen.rb index 371cc7cd05..86783b4e14 100755 --- a/cpp/rubygen/cppgen.rb +++ b/cpp/rubygen/cppgen.rb @@ -69,8 +69,8 @@ end # Additional methods for AmqpMethod class AmqpMethod def cppname() name.lcaps.cppsafe; end - def param_names() fields.collect { |f| f.cppname }; end - def signature() fields.collect { |f| f.cpptype+" "+f.cppname }; end + def param_names() @param_names ||= fields.collect { |f| f.cppname }; end + def signature() @signature ||= fields.collect { |f| f.cpptype+" "+f.cppname }; end def body_name() amqp_parent.name.caps+name.caps+"Body"; end end @@ -96,7 +96,7 @@ class AmqpRoot "table"=>["FieldTable", "const FieldTable&", "const FieldTable&"], "content"=>["Content", "const Content&", "const Content&"], "rfc1982-long-set"=>["SequenceNumberSet", "const SequenceNumberSet&", "const SequenceNumberSet&"], - "uuid"=>["Uuid", "const Uuid&", "const Uuid&"] + "uuid"=>["string", "const string&"] # FIXME should be: ["Uuid", "const Uuid&", "const Uuid&"] } def lookup(amqptype) diff --git a/cpp/rubygen/samples/Proxy.rb b/cpp/rubygen/samples/Proxy.rb deleted file mode 100755 index f7765f3729..0000000000 --- a/cpp/rubygen/samples/Proxy.rb +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env ruby -$: << ".." # Include .. in load path -require 'cppgen' - -class ProxyGen < CppGen - - def initialize(chassis, outdir, amqp) - super(outdir, amqp) - @chassis=chassis - @classname="AMQP_#{@chassis.caps}Proxy" - end - - def include(m) gen "#include \"#{m.body_name}.h\"\n"; end - - def proxy_member(c) c.name.lcaps+"Proxy"; end - - def inner_class_decl(c) - cname=c.name.caps - gen < -#include "#{@classname}.h" -#include "qpid/framing/ChannelAdapter.h" -#include "qpid/framing/amqp_types_full.h" -EOS - @amqp.methods_on(@chassis).each { |m| include(m) } - gen <" + include "#{@classname}.h" + include "qpid/framing/ChannelAdapter.h" + include "qpid/framing/amqp_types_full.h" + @amqp.methods_on(@chassis).each { + |m| include "qpid/framing/#{m.body_name}.h" } + gen <