summaryrefslogtreecommitdiff
path: root/cpp/rubygen
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/rubygen')
-rw-r--r--cpp/rubygen/99-0/Session.rb11
-rw-r--r--cpp/rubygen/99-0/structs.rb2
-rwxr-xr-xcpp/rubygen/amqpgen.rb2
-rwxr-xr-xcpp/rubygen/cppgen.rb35
4 files changed, 39 insertions, 11 deletions
diff --git a/cpp/rubygen/99-0/Session.rb b/cpp/rubygen/99-0/Session.rb
index 1ec78f6167..8e14d8daf9 100644
--- a/cpp/rubygen/99-0/Session.rb
+++ b/cpp/rubygen/99-0/Session.rb
@@ -8,7 +8,7 @@ class CppGen
def session_methods
excludes = ["channel", "connection", "session", "execution"]
gen_methods=@amqp.methods_on(@chassis).reject { |m|
- excludes.include? m.parent.name or m.body_name.include?("010")
+ excludes.include? m.classname or !m.parent.name.include?("010")
}
end
@@ -43,7 +43,7 @@ class AmqpMethod
def param_names_c() fields_c.map { |f| f.cppname} end
def signature_c() fields_c.map { |f| f.signature }; end
def sig_c_default() fields_c.map { |f| f.sig_default }; end
- def argpack_name() "#{parent.cppname}#{name.caps}Parameters"; end
+ def argpack_name() "#{classname.lcaps.cppsafe}#{name.caps}Parameters"; end
def argpack_type()
"boost::parameter::parameters<" +
fields_c.map { |f| "arg::keyword_tags::"+f.cppname }.join(',') +
@@ -54,7 +54,7 @@ class AmqpMethod
return "Response" if (not responses().empty?)
return "Completion"
end
- def session_function() "#{parent.name.lcaps}#{name.caps}"; end
+ def session_function() "#{classname.lcaps}#{name.caps}"; end
end
class SessionNoKeywordGen < CppGen
@@ -75,6 +75,7 @@ class SessionNoKeywordGen < CppGen
genl "using framing::Content;"
genl "using framing::FieldTable;"
genl "using framing::MethodContent;"
+ genl "using framing::SequenceSet;"
genl "using framing::SequenceNumberSet;"
genl "using framing::Uuid;"
genl
@@ -86,7 +87,7 @@ class SessionNoKeywordGen < CppGen
cpp_class(@classname, "public SessionBase") {
public
genl "Session_#{@amqp.version.bars}() {}"
- genl "Session_#{@amqp.version.bars}(shared_ptr<SessionCore> core) : SessionBase(core) {}"
+ genl "Session_#{@amqp.version.bars}(shared_ptr<SessionImpl> core) : SessionBase(core) {}"
session_methods.each { |m|
genl
doxygen(m)
@@ -180,7 +181,7 @@ EOS
# Session class.
cpp_class(@classname,"public #{@base}") {
private
- genl "#{@classname}(shared_ptr<SessionCore> core) : #{ @base}(core) {}"
+ genl "#{@classname}(shared_ptr<SessionImpl> core) : #{ @base}(core) {}"
keyword_methods.each { |m| typedef m.argpack_type, m.argpack_name }
genl "friend class Connection;"
public
diff --git a/cpp/rubygen/99-0/structs.rb b/cpp/rubygen/99-0/structs.rb
index 58e175af0f..b7d230d528 100644
--- a/cpp/rubygen/99-0/structs.rb
+++ b/cpp/rubygen/99-0/structs.rb
@@ -35,7 +35,7 @@ class StructGen < CppGen
def is_packed(s)
#return true
- s.kind_of?(AmqpStruct) or s.body_name.include?("010")
+ s.kind_of?(AmqpStruct) or s.parent.name.include?("010")
end
def execution_header?(s)
diff --git a/cpp/rubygen/amqpgen.rb b/cpp/rubygen/amqpgen.rb
index bf473506d4..76685aa45b 100755
--- a/cpp/rubygen/amqpgen.rb
+++ b/cpp/rubygen/amqpgen.rb
@@ -341,7 +341,7 @@ class AmqpClass < AmqpElement
end
def l4?() # preview
- !["connection", "session", "execution"].include?(name)
+ !["connection", "session", "execution"].include?(name) && !control?
end
def control?()
diff --git a/cpp/rubygen/cppgen.rb b/cpp/rubygen/cppgen.rb
index 757894163d..c1121e9bfe 100755
--- a/cpp/rubygen/cppgen.rb
+++ b/cpp/rubygen/cppgen.rb
@@ -88,6 +88,12 @@ class CppType
def passcref() @param="const #{name}&"; self; end
def code(str) @code=str; self; end
def defval(str) @defval=str; self; end
+ def fq(namespace)
+ @param="const #{namespace}::#{name}&"
+ @ret="const #{namespace}::#{name}&"
+ @defval="#{namespace}::#{name}()"
+ self
+ end
def encode(value, buffer)
@code ? "#{buffer}.put#{@code}(#{value});" : "#{value}.encode(#{buffer});"
@@ -143,7 +149,19 @@ class AmqpMethod
def cppname() name.lcaps.cppsafe; end
def param_names() fields.map { |f| f.cppname }; end
def signature() fields.map { |f| f.signature }; end
- def body_name() parent.name.caps+name.caps+"Body"; end
+ def classname()
+ #TODO: remove name mangling after preview path is dropped
+ if (parent.name.include?("010"))
+ return parent.name.delete("010")
+ elsif (parent.name == "cluster")
+ return parent.name
+ else
+ return parent.name + "X"
+ end
+ end
+ def body_name()
+ classname().caps+name.caps+"Body"
+ end
def cpp_pack_type() # preview
CppType.new("uint16_t").code("Short").defval("0");
@@ -211,7 +229,16 @@ class AmqpDomain
"uuid"=>CppType.new("Uuid").passcref.retcref
}
- def cppname() name.caps; end
+ def cppname()
+ #TODO: remove name mangling after preview path is dropped
+ if (name.include?("010"))
+ return name.caps.delete("010")
+ elsif (name.include?("properties"))
+ return "Preview" + name.caps
+ else
+ return name.caps
+ end
+ end
def fqtypename()
return containing_class.nsname+"::"+name.typename if containing_class
@@ -221,7 +248,7 @@ class AmqpDomain
def cpptype()
d=unalias
@cpptype ||= @@typemap[d.type_] or
- CppType.new(d.cppname).passcref.retcref or
+ CppType.new(d.cppname).fq("qpid::framing") or
raise "Invalid type #{self}"
end
@@ -232,7 +259,7 @@ end
class AmqpResult
def cpptype()
- @cpptype=CppType.new(parent.parent.name.caps+parent.name.caps+"Result").passcref
+ @cpptype=CppType.new(parent.classname.caps+parent.name.caps+"Result").passcref
end
end