summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-08-02 21:00:54 +0000
committerAlan Conway <aconway@apache.org>2007-08-02 21:00:54 +0000
commitcd6b4ba256effcf6c3e3f69a74e51d82c579e2ea (patch)
treef45ef849bb8d138c6e709464dc71e4cb502fa0cf /cpp
parent029c638fd23d3e53a58ca521209ae62057e59689 (diff)
downloadqpid-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
Diffstat (limited to 'cpp')
-rwxr-xr-xcpp/rubygen/cppgen.rb11
-rwxr-xr-xcpp/rubygen/generate2
-rwxr-xr-xcpp/rubygen/samples/Operations.rb4
-rwxr-xr-xcpp/rubygen/samples/Proxy.rb4
-rwxr-xr-xcpp/rubygen/templates/ClassBodyVariant.rb29
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();
+