summaryrefslogtreecommitdiff
path: root/cpp/rubygen/templates
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/rubygen/templates')
-rw-r--r--cpp/rubygen/templates/InvocationVisitor.rb18
-rwxr-xr-xcpp/rubygen/templates/MethodBodyConstVisitor.rb4
-rwxr-xr-xcpp/rubygen/templates/MethodHolder.rb12
-rwxr-xr-xcpp/rubygen/templates/Operations.rb23
-rwxr-xr-xcpp/rubygen/templates/Proxy.rb14
-rw-r--r--cpp/rubygen/templates/Session.rb12
-rwxr-xr-xcpp/rubygen/templates/all_method_bodies.rb2
-rw-r--r--cpp/rubygen/templates/frame_body_lists.rb2
-rw-r--r--cpp/rubygen/templates/structs.rb60
9 files changed, 66 insertions, 81 deletions
diff --git a/cpp/rubygen/templates/InvocationVisitor.rb b/cpp/rubygen/templates/InvocationVisitor.rb
index 7017872176..befbdd53c7 100644
--- a/cpp/rubygen/templates/InvocationVisitor.rb
+++ b/cpp/rubygen/templates/InvocationVisitor.rb
@@ -12,7 +12,7 @@ class InvocationVisitor < CppGen
end
def invocation_args(m)
- if (m.amqp_parent.name == "message" && (m.name == "transfer" || m.name == "append"))
+ if (m.parent.name == "message" && (m.name == "transfer" || m.name == "append"))
"body"
else
m.param_names.collect {|p| "body.get" + p.caps + "()" }.join(",\n")
@@ -32,17 +32,17 @@ class InvocationVisitor < CppGen
gen <<EOS
void InvocationVisitor::visit(const #{m.body_name}& #{body})
{
- AMQP_ServerOperations::#{m.amqp_parent.cppname}Handler* ptr(0);
+ AMQP_ServerOperations::#{m.parent.cppname}Handler* ptr(0);
if (invocable) {
- ptr = dynamic_cast<AMQP_ServerOperations::#{m.amqp_parent.cppname}Handler*>(invocable);
+ ptr = dynamic_cast<AMQP_ServerOperations::#{m.parent.cppname}Handler*>(invocable);
} else {
- ptr = ops->get#{m.amqp_parent.cppname}Handler();
+ ptr = ops->get#{m.parent.cppname}Handler();
}
if (ptr) {
EOS
- if (m.has_result?)
- indent(2) { genl "encode<#{m.result_struct.cppname.caps}>(ptr->#{m.cppname}(#{invocation_args(m)}), result);" }
+ if (m.result)
+ indent(2) { genl "encode<#{m.result.struct.cpptype.name}>(ptr->#{m.cppname}(#{invocation_args(m)}), result);" }
else
indent(2) { genl "ptr->#{m.cppname}(#{invocation_args(m)});" }
end
@@ -79,14 +79,14 @@ EOS
genl "void clear();"
genl "virtual ~InvocationVisitor() {}"
}
- @amqp.amqp_methods.each { |m| genl "void visit(const #{m.body_name}&);" }
+ @amqp.methods_.each { |m| genl "void visit(const #{m.body_name}&);" }
}
}
}
cpp_file("#{@filename}") {
include "InvocationVisitor.h"
- @amqp.amqp_methods.each { |m| include m.body_name }
+ @amqp.methods_.each { |m| include m.body_name }
namespace(@namespace) {
genl "void InvocationVisitor::clear() {"
indent {
@@ -95,7 +95,7 @@ EOS
}
genl "}"
genl
- @amqp.amqp_methods.each { |m| m.is_server_method? ? define_visit(m) : null_visit(m) }
+ @amqp.methods_.each { |m| m.on_server? ? define_visit(m) : null_visit(m) }
}
}
end
diff --git a/cpp/rubygen/templates/MethodBodyConstVisitor.rb b/cpp/rubygen/templates/MethodBodyConstVisitor.rb
index 6fd7fe8ead..18f74a2e41 100755
--- a/cpp/rubygen/templates/MethodBodyConstVisitor.rb
+++ b/cpp/rubygen/templates/MethodBodyConstVisitor.rb
@@ -14,11 +14,11 @@ class MethodBodyConstVisitorGen < CppGen
def generate()
h_file("#{@filename}") {
namespace(@namespace) {
- @amqp.amqp_methods.each { |m| genl "class #{m.body_name};" }
+ @amqp.methods_.each { |m| genl "class #{m.body_name};" }
cpp_class("MethodBodyConstVisitor") {
genl "public:"
genl "virtual ~MethodBodyConstVisitor() {}"
- @amqp.amqp_methods.each { |m| genl "virtual void visit(const #{m.body_name}&) = 0;" }
+ @amqp.methods_.each { |m| genl "virtual void visit(const #{m.body_name}&) = 0;" }
}}}
end
end
diff --git a/cpp/rubygen/templates/MethodHolder.rb b/cpp/rubygen/templates/MethodHolder.rb
index 39a570c982..95c60f5727 100755
--- a/cpp/rubygen/templates/MethodHolder.rb
+++ b/cpp/rubygen/templates/MethodHolder.rb
@@ -14,7 +14,7 @@ class MethodHolderGen < CppGen
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}" }
+ @amqp.methods_.each { |m| include "qpid/framing/#{m.body_name}" }
genl
include "<algorithm>"
include "<fstream>"
@@ -24,7 +24,7 @@ class MethodHolderGen < CppGen
genl
scope("int main(int, char** argv) {") {
genl "size_t maxSize=0;"
- @amqp.amqp_methods.each { |m|
+ @amqp.methods_.each { |m|
genl "maxSize=max(maxSize, sizeof(#{m.body_name}));" }
gen <<EOS
ofstream out("#{@filename}MaxSize.h");
@@ -41,7 +41,7 @@ EOS
cpp_file(@filename+"_construct") {
include @filename
include "qpid/framing/MethodBodyConstVisitor.h"
- @amqp.amqp_methods.each { |m| include "qpid/framing/#{m.body_name}" }
+ @amqp.methods_.each { |m| include "qpid/framing/#{m.body_name}" }
genl
include "qpid/Exception.h"
genl
@@ -49,9 +49,9 @@ EOS
# construct function
scope("void #{@classname}::construct(ClassId c, MethodId m) {") {
scope("switch (c) {") {
- @amqp.amqp_classes.each { |c|
+ @amqp.classes.each { |c|
scope("case #{c.index}: switch(m) {") {
- c.amqp_methods.each { |m|
+ c.methods_.each { |m|
genl "case #{m.index}: blob.construct(in_place<#{m.body_name}>()); break;"
}
genl "default: throw Exception(QPID_MSG(\"Invalid method id \" << m << \" for class #{c.name} \"));"
@@ -64,7 +64,7 @@ EOS
# CopyVisitor
struct("#{@classname}::CopyVisitor", "public MethodBodyConstVisitor") { genl "MethodHolder& holder;"
genl "CopyVisitor(MethodHolder& h) : holder(h) {}"
- @amqp.amqp_methods.each { |m|
+ @amqp.methods_.each { |m|
genl "void visit(const #{m.body_name}& x) { holder.blob=x; }"
}
}
diff --git a/cpp/rubygen/templates/Operations.rb b/cpp/rubygen/templates/Operations.rb
index 79b82a9d59..9f242f5910 100755
--- a/cpp/rubygen/templates/Operations.rb
+++ b/cpp/rubygen/templates/Operations.rb
@@ -3,6 +3,9 @@
#
$: << '..'
require 'cppgen'
+require 'fileutils'
+require 'etc'
+require 'pathname'
class OperationsGen < CppGen
@@ -13,12 +16,8 @@ class OperationsGen < CppGen
end
def handler_method (m)
- if (m.has_result?)
- return_type = "#{m.amqp_parent.name.caps}#{m.cppname.caps}Result"
- else
- return_type = "void"
- end
- if (m.amqp_parent.name == "message" && (m.name == "transfer" || m.name == "append"))
+ return_type = m.result ? m.result.cpptype.ret : "void"
+ if (m.parent.name == "message" && (m.name == "transfer" || m.name == "append"))
gen "\nvirtual #{return_type} #{m.cppname}(const framing::AMQMethodBody& context) = 0;\n"
else
gen "\nvirtual #{return_type} #{m.cppname}("
@@ -30,7 +29,7 @@ class OperationsGen < CppGen
def handler_classname(c) c.name.caps+"Handler"; end
def handler_class(c)
- if (!c.amqp_methods_on(@chassis).empty?)
+ if (!c.methods_on(@chassis).empty?)
handlerclass=handler_classname c
gen <<EOS
// ==================== class #{handlerclass} ====================
@@ -41,7 +40,7 @@ class #{handlerclass} : public virtual Invocable {
virtual ~#{handlerclass}() {}
// Protocol methods
EOS
- c.amqp_methods_on(@chassis).each { |m| handler_method(m) }
+ c.methods_on(@chassis).each { |m| handler_method(m) }
gen <<EOS
}; // class #{handlerclass}
@@ -51,14 +50,14 @@ EOS
end
def handler_get(c)
- if (!c.amqp_methods_on(@chassis).empty?)
+ if (!c.methods_on(@chassis).empty?)
handlerclass=handler_classname c
gen "virtual #{handlerclass}* get#{handlerclass}() = 0;\n"
end
end
def generate()
- h_file("qpid/framing/#{@classname}.h") {
+ h_file("qpid/framing/#{@classname}.h") {
gen <<EOS
#include <sstream>
#include "qpid/framing/ProtocolVersion.h"
@@ -88,13 +87,13 @@ class #{@classname} {
// Inner classes
EOS
- indent { @amqp.amqp_classes.each { |c| handler_class(c) } }
+ indent { @amqp.classes.each { |c| handler_class(c) } }
gen <<EOS
// Method handler get methods
EOS
- indent { @amqp.amqp_classes.each { |c| handler_get(c) } }
+ indent { @amqp.classes.each { |c| handler_get(c) } }
gen <<EOS
}; /* class #{@classname} */
}}
diff --git a/cpp/rubygen/templates/Proxy.rb b/cpp/rubygen/templates/Proxy.rb
index a6c0763a8a..41e0cc1882 100755
--- a/cpp/rubygen/templates/Proxy.rb
+++ b/cpp/rubygen/templates/Proxy.rb
@@ -26,7 +26,7 @@ virtual ~#{cname}() {}
static #{cname}& get(#{@classname}& proxy) { return proxy.get#{cname}(); }
EOS
- c.amqp_methods_on(@chassis).each { |m|
+ c.methods_on(@chassis).each { |m|
genl "virtual void #{m.cppname}(#{m.signature.join(",\n ")});"
genl
}}
@@ -34,7 +34,7 @@ EOS
def inner_class_defn(c)
cname=c.cppname
- c.amqp_methods_on(@chassis).each { |m|
+ c.methods_on(@chassis).each { |m|
genl "void #{@classname}::#{cname}::#{m.cppname}(#{m.signature.join(", ")})"
scope {
params=(["channel.getVersion()"]+m.param_names).join(", ")
@@ -51,14 +51,14 @@ EOS
public
genl "#{@classname}(ChannelAdapter& ch);"
genl
- @amqp.amqp_classes.each { |c|
+ @amqp.classes.each { |c|
inner_class_decl(c)
genl
genl "#{c.cppname}& get#{c.cppname}() { return #{proxy_member(c)}; }"
genl
}
private
- @amqp.amqp_classes.each{ |c| gen c.cppname+" "+proxy_member(c)+";\n" }
+ @amqp.classes.each{ |c| gen c.cppname+" "+proxy_member(c)+";\n" }
}}}
# .cpp file
@@ -67,14 +67,14 @@ EOS
include "#{@classname}.h"
include "qpid/framing/ChannelAdapter.h"
include "qpid/framing/amqp_types_full.h"
- Amqp.amqp_methods_on(@chassis).each { |m| include "qpid/framing/"+m.body_name }
+ Amqp.methods_on(@chassis).each { |m| include "qpid/framing/"+m.body_name }
genl
namespace("qpid::framing") {
genl "#{@classname}::#{@classname}(ChannelAdapter& ch) :"
gen " Proxy(ch)"
- @amqp.amqp_classes.each { |c| gen ",\n "+proxy_member(c)+"(channel)" }
+ @amqp.classes.each { |c| gen ",\n "+proxy_member(c)+"(channel)" }
genl "{}\n"
- @amqp.amqp_classes.each { |c| inner_class_defn(c) }
+ @amqp.classes.each { |c| inner_class_defn(c) }
}}
end
end
diff --git a/cpp/rubygen/templates/Session.rb b/cpp/rubygen/templates/Session.rb
index 0d5808318a..f4af2041dd 100644
--- a/cpp/rubygen/templates/Session.rb
+++ b/cpp/rubygen/templates/Session.rb
@@ -13,7 +13,7 @@ class SessionGen < CppGen
end
def declare_method (m)
- gen "Response #{m.amqp_parent.name.lcaps}#{m.name.caps}("
+ gen "Response #{m.parent.name.lcaps}#{m.name.caps}("
if (m.content())
params=m.signature + ["const MethodContent& content"]
else
@@ -24,11 +24,11 @@ class SessionGen < CppGen
end
def declare_class(c)
- c.amqp_methods_on(@chassis).each { |m| declare_method(m) }
+ c.methods_on(@chassis).each { |m| declare_method(m) }
end
def define_method (m)
- gen "Response Session::#{m.amqp_parent.name.lcaps}#{m.name.caps}("
+ gen "Response Session::#{m.parent.name.lcaps}#{m.name.caps}("
if (m.content())
params=m.signature + ["const MethodContent& content"]
else
@@ -55,7 +55,7 @@ class SessionGen < CppGen
end
def define_class(c)
- c.amqp_methods_on(@chassis).each { |m| define_method(m) }
+ c.methods_on(@chassis).each { |m| define_method(m) }
end
def generate()
@@ -92,7 +92,7 @@ public:
void setSynchronous(bool sync) { impl->setSync(sync); }
void close();
EOS
- indent { @amqp.amqp_classes.each { |c| declare_class(c) if !excludes.include?(c.name) } }
+ indent { @amqp.classes.each { |c| declare_class(c) if !excludes.include?(c.name) } }
gen <<EOS
}; /* class #{@classname} */
}
@@ -134,7 +134,7 @@ void #{@classname}::close()
EOS
- @amqp.amqp_classes.each { |c| define_class(c) if !excludes.include?(c.name) }
+ @amqp.classes.each { |c| define_class(c) if !excludes.include?(c.name) }
gen <<EOS
}} // namespace qpid::client
diff --git a/cpp/rubygen/templates/all_method_bodies.rb b/cpp/rubygen/templates/all_method_bodies.rb
index 38fbc31593..d06f459493 100755
--- a/cpp/rubygen/templates/all_method_bodies.rb
+++ b/cpp/rubygen/templates/all_method_bodies.rb
@@ -12,7 +12,7 @@ class AllMethodBodiesGen < CppGen
def generate()
h_file(@filename) {
- @amqp.amqp_methods.each { |m| include "qpid/framing/"+m.body_name }
+ @amqp.methods_.each { |m| include "qpid/framing/"+m.body_name }
}
end
end
diff --git a/cpp/rubygen/templates/frame_body_lists.rb b/cpp/rubygen/templates/frame_body_lists.rb
index 25231e7e1a..634001ab14 100644
--- a/cpp/rubygen/templates/frame_body_lists.rb
+++ b/cpp/rubygen/templates/frame_body_lists.rb
@@ -15,7 +15,7 @@ class FrameBodyListsGen < CppGen
*/
EOS
gen "#define METHOD_BODIES() "
- @amqp.amqp_methods.each { |m| gen "\\\n (#{m.body_name}) " }
+ @amqp.methods_.each { |m| gen "\\\n (#{m.body_name}) " }
gen <<EOS
diff --git a/cpp/rubygen/templates/structs.rb b/cpp/rubygen/templates/structs.rb
index 571a85b827..47670e9953 100644
--- a/cpp/rubygen/templates/structs.rb
+++ b/cpp/rubygen/templates/structs.rb
@@ -18,10 +18,10 @@ class StructGen < CppGen
"longstr"=>"LongString",
"shortstr"=>"ShortString",
"timestamp"=>"LongLong",
- "uuid"=>"ShortString",#FIXME
"table"=>"FieldTable",
"content"=>"Content",
- "long-struct"=>"LongString"
+ "long-struct"=>"LongString",
+ "uuid" => "ShortString" # FIXME aconway 2007-08-27:
}
SizeMap={
"octet"=>"1",
@@ -34,7 +34,7 @@ class StructGen < CppGen
ValueTypes=["octet", "short", "long", "longlong", "timestamp"]
def printable_form(f)
- if (f.cpptype == "u_int8_t")
+ if (f.cpptype.name == "u_int8_t")
return "(int) " + f.cppname
else
return f.cppname
@@ -42,53 +42,39 @@ class StructGen < CppGen
end
def generate_encode(f, combined)
- if (f.field_type == "bit")
+ if (f.domain.type_ == "bit")
genl "uint8_t #{f.cppname}_bits = #{f.cppname};"
count = 0
combined.each { |c| genl "#{f.cppname}_bits |= #{c.cppname} << #{count += 1};" }
genl "buffer.putOctet(#{f.cppname}_bits);"
else
- encoded = EncodingMap[f.field_type]
- if (encoded)
- genl "buffer.put#{encoded}(#{f.cppname});"
- else
- genl "#{f.cppname}.encode(buffer);"
- end
+ genl f.domain.cpptype.encode(f.cppname,"buffer")
end
end
def generate_decode(f, combined)
- if (f.field_type == "bit")
+ if (f.domain.type_ == "bit")
genl "uint8_t #{f.cppname}_bits = buffer.getOctet();"
genl "#{f.cppname} = 1 & #{f.cppname}_bits;"
count = 0
combined.each { |c| genl "#{c.cppname} = (1 << #{count += 1}) & #{f.cppname}_bits;" }
else
- encoded = EncodingMap[f.field_type]
- if (encoded)
- if (ValueTypes.include?(f.field_type))
- genl "#{f.cppname} = buffer.get#{encoded}();"
- else
- genl "buffer.get#{encoded}(#{f.cppname});"
- end
- else
- genl "#{f.cppname}.decode(buffer);"
- end
+ genl f.domain.cpptype.decode(f.cppname,"buffer")
end
end
def generate_size(f, combined)
- if (f.field_type == "bit")
+ if (f.domain.type_ == "bit")
names = ([f] + combined).collect {|g| g.cppname}
genl "+ 1 //#{names.join(", ")}"
else
- size = SizeMap[f.field_type]
+ size = SizeMap[f.domain.type_]
if (size)
genl "+ #{size} //#{f.cppname}"
- elsif (f.cpp_member_type == "SequenceNumberSet")
+ elsif (f.cpptype.name == "SequenceNumberSet")
genl "+ #{f.cppname}.encodedSize()"
else
- encoded = EncodingMap[f.field_type]
+ encoded = EncodingMap[f.domain.type_]
gen "+ 4 " if encoded == "LongString"
gen "+ 1 " if encoded == "ShortString"
genl "+ #{f.cppname}.size()"
@@ -137,7 +123,7 @@ EOS
if (s.kind_of? AmqpMethod)
indent {gen "ProtocolVersion, "}
end
- indent { gen s.fields.collect { |f| "#{f.cpptype} _#{f.cppname}" }.join(",\n") }
+ indent { gen s.fields.collect { |f| "#{f.cpptype.param} _#{f.cppname}" }.join(",\n") }
gen ")"
genl ": " if s.fields.size > 0
indent { gen s.fields.collect { |f| " #{f.cppname}(_#{f.cppname})" }.join(",\n") }
@@ -149,8 +135,8 @@ EOS
end
def define_accessors(f)
- genl "void set#{f.name.caps}(#{f.cpptype} _#{f.cppname}) { #{f.cppname} = _#{f.cppname}; }"
- genl "#{f.cpptype} get#{f.name.caps}() const { return #{f.cppname}; }"
+ genl "void set#{f.name.caps}(#{f.cpptype.param} _#{f.cppname}) { #{f.cppname} = _#{f.cppname}; }"
+ genl "#{f.cpptype.ret} get#{f.name.caps}() const { return #{f.cppname}; }"
end
def define_struct(s)
@@ -171,7 +157,7 @@ EOS
end
#need to include any nested struct definitions
- s.fields.select {|f| f.defined_as_struct }.map {|f| include f.name.caps}
+ s.fields.each { |f| include f.cpptype.name if f.domain.struct }
gen <<EOS
@@ -183,23 +169,23 @@ namespace framing {
class #{classname} #{inheritance} {
EOS
- indent { s.fields.each { |f| genl "#{f.cpp_member_type} #{f.cppname};" } }
+ indent { s.fields.each { |f| genl "#{f.cpptype.name} #{f.cppname};" } }
genl "public:"
if (s.kind_of? AmqpMethod)
- indent { genl "static const ClassId CLASS_ID = #{s.amqp_parent.index};" }
+ indent { genl "static const ClassId CLASS_ID = #{s.parent.index};" }
indent { genl "static const MethodId METHOD_ID = #{s.index};" }
end
if (s.kind_of? AmqpStruct)
- if (s.type)
+ if (s.type_)
if (s.result?)
#as result structs have types that are only unique to the
#class, they have a class dependent qualifier added to them
#(this is inline with current python code but a formal
#solution is expected from the WG
- indent { genl "static const uint16_t TYPE = #{s.type} + #{s.amqp_parent.amqp_parent.index} * 256;" }
+ indent { genl "static const uint16_t TYPE = #{s.type_} + #{s.parent.parent.parent.index} * 256;" }
else
- indent { genl "static const uint16_t TYPE = #{s.type};" }
+ indent { genl "static const uint16_t TYPE = #{s.type_};" }
end
end
end
@@ -295,10 +281,10 @@ EOS
end
def generate()
- @amqp.amqp_structs.each { |s| define_struct(s) }
- @amqp.amqp_methods.each { |m| define_struct(m) }
+ @amqp.structs.each { |s| define_struct(s) }
+ @amqp.methods_.each { |m| define_struct(m) }
#generate a single include file containing the list of structs for convenience
- h_file("qpid/framing/amqp_structs.h") { @amqp.amqp_structs.each { |s| genl "#include \"#{s.cppname}.h\"" } }
+ h_file("qpid/framing/amqp_structs.h") { @amqp.structs.each { |s| genl "#include \"#{s.cppname}.h\"" } }
end
end