diff options
Diffstat (limited to 'cpp/rubygen')
-rw-r--r-- | cpp/rubygen/99-0/Session.rb | 11 | ||||
-rw-r--r-- | cpp/rubygen/99-0/structs.rb | 2 | ||||
-rwxr-xr-x | cpp/rubygen/amqpgen.rb | 2 | ||||
-rwxr-xr-x | cpp/rubygen/cppgen.rb | 35 |
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 |