Class: Rbind::GeneratorRuby::RBindHelper

Inherits:
HelperBase
  • Object
show all
Defined in:
lib/rbind/generator_ruby.rb

Instance Attribute Summary collapse

Attributes inherited from HelperBase

#name

Instance Method Summary collapse

Methods inherited from HelperBase

#binding, #full_name

Constructor Details

#initialize(name, root, compact_namespace = true) ⇒ RBindHelper

Returns a new instance of RBindHelper.



222
223
224
225
# File 'lib/rbind/generator_ruby.rb', line 222

def initialize(name, root,compact_namespace=true)
    @compact_namespace = compact_namespace
    super(name,root)
end

Instance Attribute Details

#compact_namespaceObject (readonly)

Returns the value of attribute compact_namespace.



220
221
222
# File 'lib/rbind/generator_ruby.rb', line 220

def compact_namespace
  @compact_namespace
end

Instance Method Details

#add_accessorsObject



258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
# File 'lib/rbind/generator_ruby.rb', line 258

def add_accessors
    str = ""
    @root.root.each_type do |t|
        next if t.basic_type? && !t.is_a?(RNamespace)
        str += "\n#methods for #{t.full_name}\n"
        if t.cdelete_method
            str += "attach_function :#{normalize_m t.cdelete_method},"\
            ":#{t.cdelete_method},[#{normalize_t(t.full_name)}],:void\n"
            str += "attach_function :#{normalize_m t.cdelete_method}_struct,"\
            ":#{t.cdelete_method},[#{normalize_t(t.full_name)}Struct],:void\n"
        end
        t.each_operation do |op|
            return_type = if op.constructor?
                              "#{normalize_t op.owner.full_name}"
                          else
                              if op.return_type.basic_type?
                                  if op.return_type.ptr?
                                      ":pointer"
                                  else
                                      ":#{normalize_bt op.return_type.to_raw.csignature}"
                                  end
                              else
                                  if op.return_type.extern_package_name
                                      normalize_t("::#{op.return_type.extern_package_name}::#{op.return_type.to_raw.full_name}")
                                  else
                                      normalize_t op.return_type.to_raw.full_name
                                  end
                              end
                          end
            args = op.cparameters.map do |p|
                if p.type.basic_type?
                    if p.type.ptr?
                        ":pointer"
                    else
                        ":#{normalize_bt p.type.to_raw.csignature}"
                    end
                else
                    if p.type.extern_package_name
                        normalize_t("::#{p.type.extern_package_name}::#{p.type.to_raw.full_name}")
                    else
                        normalize_t p.type.to_raw.full_name
                    end
                end
            end
            fct_name = normalize_m op.cname
            str += "attach_function :#{fct_name},:#{op.cname},[#{args.join(",")}],#{return_type}\n"
            str
        end
        str+"\n"
    end
    str+"\n"
    str.gsub(/\n/,"\n        ")
end

#file_prefixObject



254
255
256
# File 'lib/rbind/generator_ruby.rb', line 254

def file_prefix
    @root.file_prefix
end

#library_nameObject



244
245
246
# File 'lib/rbind/generator_ruby.rb', line 244

def library_name
    @root.library_name
end

#normalize_bt(name) ⇒ Object



236
237
238
# File 'lib/rbind/generator_ruby.rb', line 236

def normalize_bt(name)
    GeneratorRuby.normalize_basic_type_name_ffi name
end

#normalize_m(name) ⇒ Object



240
241
242
# File 'lib/rbind/generator_ruby.rb', line 240

def normalize_m(name)
    GeneratorRuby.normalize_method_name name
end

#normalize_t(name) ⇒ Object



227
228
229
230
231
232
233
234
# File 'lib/rbind/generator_ruby.rb', line 227

def normalize_t(name)
    t = GeneratorRuby.normalize_type_name name
    if compact_namespace
        t.gsub(/^#{self.name}::/,"")
    else
        t
    end
end

#required_module_namesObject



248
249
250
251
252
# File 'lib/rbind/generator_ruby.rb', line 248

def required_module_names
    @root.required_module_names.map do |name|
        "require '#{name.downcase}'\n"
    end.join
end