diff options
| author | Alan Conway <aconway@apache.org> | 2007-08-09 22:31:59 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2007-08-09 22:31:59 +0000 |
| commit | 22c323f9c9348a651e1f78913b438535b554edfc (patch) | |
| tree | a89a75b1324250a36f24f330ad21d39815f8a4bf /qpid/cpp/rubygen/templates | |
| parent | f105c4ec6a6519b02cd12cd673a9e9412f6f19b6 (diff) | |
| download | qpid-python-22c323f9c9348a651e1f78913b438535b554edfc.tar.gz | |
* src/qpid/framing/MethodHolder.h, .cpp:
Replace boost::variant with Blob.
* rubygen/templates/MethodHolder.rb:
Generate support files for Blob-based MethodHolder.
* src/Makefile.am: generate MethodHolder suppport files.
* rubygen/cppgen.rb: Minor fixes/enhancements.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@564409 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/rubygen/templates')
| -rwxr-xr-x | qpid/cpp/rubygen/templates/MethodHolder.rb | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/qpid/cpp/rubygen/templates/MethodHolder.rb b/qpid/cpp/rubygen/templates/MethodHolder.rb new file mode 100755 index 0000000000..a99270055f --- /dev/null +++ b/qpid/cpp/rubygen/templates/MethodHolder.rb @@ -0,0 +1,67 @@ +#!/usr/bin/env ruby +$: << ".." # Include .. in load path +require 'cppgen' + +class MethodHolderGen < CppGen + + def initialize(outdir, amqp) + super(outdir, amqp) + @namespace="qpid::framing" + @classname="MethodHolder" + @filename="qpid/framing/MethodHolder" + end + + def gen_max_size() + # Generate program to generate MaxSize.h + cpp_file("generate_#{@classname}MaxSize_h") { + @amqp.amqp_methods.each { |m| include "qpid/framing/#{m.body_name}" } + genl + include "<algorithm>" + include "<fstream>" + genl + genl "using namespace std;" + genl "using namespace qpid::framing;" + genl + scope("int main(int argc, char** argv) {") { + genl "size_t maxSize=0;" + @amqp.amqp_methods.each { |m| + genl "maxSize=max(maxSize, sizeof(#{m.body_name}));" } + gen <<EOS +ofstream out("#{@filename}MaxSize.h"); +out << "// GENERATED CODE: generated by " << argv[0] << endl; +out << "namespace qpid{ namespace framing { " << endl; +out << "const size_t MAX_METHODBODY_SIZE=" << maxSize << ";" << endl; +out << "}}" << endl; +EOS + } + } + end + + def gen_construct + cpp_file(@filename+"_construct") { + include @filename + @amqp.amqp_methods.each { |m| include "qpid/framing/#{m.body_name}" } + genl + namespace(@namespace) { + scope("void #{@classname}::construct(const Id& newId) {") { + scope("switch (newId.first) {") { + @amqp.amqp_classes.each { |c| + scope("case #{c.index}: switch(newId.second) {") { + c.amqp_methods.each { |m| + genl "case #{m.index}: blob.construct(in_place<#{m.body_name}>()); break;" + }} + genl "break;" + }} + genl "id=newId;"; + }}} + end + + + def generate + gen_max_size + gen_construct + end +end + +MethodHolderGen.new(Outdir, Amqp).generate(); + |
