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.



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

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.



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

def compact_namespace
  @compact_namespace
end

Instance Method Details

#add_accessorsObject



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
311
# File 'lib/rbind/generator_ruby.rb', line 259

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



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

def file_prefix
    @root.file_prefix
end

#library_nameObject



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

def library_name
    @root.library_name
end

#normalize_bt(name) ⇒ Object



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

def normalize_bt(name)
    GeneratorRuby.normalize_basic_type_name_ffi name
end

#normalize_m(name) ⇒ Object



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

def normalize_m(name)
    GeneratorRuby.normalize_method_name name
end

#normalize_t(name) ⇒ Object



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

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

#required_module_namesObject



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

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