Method: EasySwig::GeneratorUtil#nested_workaround
- Defined in:
- lib/generators/generator_util.rb
#nested_workaround(innerclass) ⇒ Object
Innerclasses
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/generators/generator_util.rb', line 6 def nested_workaround(innerclass) # Innerclasses return '' if innerclass.abstract? return '' if no_public_constructors?(innerclass) || no_public_destructors?(innerclass) return '' if @all_innerclasses[innerclass.target_name] namespace = @api_class.parent siblings = namespace.classes + namespace.structs return '' if siblings.any?{ |c| c.basename == innerclass.basename } swig_file = '' own_typedefs = {} swig_file << "namespace #{namespace.name} {\n" swig_file << "\tclass #{innerclass.target_name} {\n" swig_file << "\t\tpublic:\n" innerclass.api_attributes.each { |attr| typename = attr.type.name if is_template?(typename) typename = typename.gsub('>::type', '>') # TODO only for Ogre end swig_file << "\t\t#{attr.static.to_s} #{typename} #{attr.basename};\n" } innerclass.api_methods.each { |meth| broken = false type_typename = meth.type.name if is_template?(type_typename) type_typename = type_typename.gsub('>::type', '>') # TODO only for Ogre end param_typenames = "" n = 1 meth.params.map{ |p| typename = p.type.name if is_template?(typename) typename = typename.gsub('>::type', '>') # TODO only for Ogre end param_typenames << " #{typename} arg#{n}," n += 1 } next if broken swig_file << "\t\t#{meth.static.to_s} #{type_typename} #{meth.basename}(#{param_typenames.chop});\n" } innerclass.api_enums.each { |enum| swig_file << enum_snippet(enum) } @all_innerclasses[innerclass.target_name] = 1 swig_file << "\t};\n}\n" swig_file << "%rename(#{innerclass.target_name}) #{innerclass.basename};\n" swig_file << "%nestedworkaround #{@api_class.name}::#{innerclass.basename};\n" swig_file << "%{\nnamespace #{namespace.name} {\n" swig_file << "\ttypedef #{@api_class.name}::#{innerclass.basename} #{innerclass.target_name};\n" swig_file << "}\n%}\n" swig_file end |