Class: FFIGen::FunctionOrCallback

Inherits:
Type
  • Object
show all
Defined in:
lib/ffi_gen.rb,
lib/ffi_gen/java_output.rb,
lib/ffi_gen/ruby_output.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(generator, name, parameters, return_type, is_callback, blocking, function_description, return_value_description) ⇒ FunctionOrCallback

Returns a new instance of FunctionOrCallback.



114
115
116
117
118
119
120
121
122
123
# File 'lib/ffi_gen.rb', line 114

def initialize(generator, name, parameters, return_type, is_callback, blocking, function_description, return_value_description)
  @generator = generator
  @name = name
  @parameters = parameters
  @return_type = return_type
  @is_callback = is_callback
  @blocking = blocking
  @function_description = function_description
  @return_value_description = return_value_description
end

Instance Attribute Details

#function_descriptionObject (readonly)

Returns the value of attribute function_description.



112
113
114
# File 'lib/ffi_gen.rb', line 112

def function_description
  @function_description
end

#nameObject (readonly)

Returns the value of attribute name.



112
113
114
# File 'lib/ffi_gen.rb', line 112

def name
  @name
end

#parametersObject (readonly)

Returns the value of attribute parameters.



112
113
114
# File 'lib/ffi_gen.rb', line 112

def parameters
  @parameters
end

#return_typeObject (readonly)

Returns the value of attribute return_type.



112
113
114
# File 'lib/ffi_gen.rb', line 112

def return_type
  @return_type
end

#return_value_descriptionObject (readonly)

Returns the value of attribute return_value_description.



112
113
114
# File 'lib/ffi_gen.rb', line 112

def return_value_description
  @return_value_description
end

Instance Method Details

#java_descriptionObject



159
160
161
# File 'lib/ffi_gen/java_output.rb', line 159

def java_description
  "Proc(_callback_#{java_name}_)"
end

#java_jna_typeObject



155
156
157
# File 'lib/ffi_gen/java_output.rb', line 155

def java_jna_type
  java_name
end

#java_nameObject



151
152
153
# File 'lib/ffi_gen/java_output.rb', line 151

def java_name
  @java_name ||= @name.to_java_downcase
end

#ruby_descriptionObject



176
177
178
# File 'lib/ffi_gen/ruby_output.rb', line 176

def ruby_description
  "Proc(_callback_#{ruby_name}_)"
end

#ruby_ffi_typeObject



172
173
174
# File 'lib/ffi_gen/ruby_output.rb', line 172

def ruby_ffi_type
  ":#{ruby_name}"
end

#ruby_nameObject



168
169
170
# File 'lib/ffi_gen/ruby_output.rb', line 168

def ruby_name
  @ruby_name ||= @name.to_ruby_downcase
end

#write_java(writer) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/ffi_gen/java_output.rb', line 129

def write_java(writer)
  return if @is_callback # not yet supported
  
  writer.comment do
    writer.write_description @function_description
    writer.puts "", "<em>This entry is only for documentation and no real method.</em>" if @is_callback
    writer.puts "", "@method #{@is_callback ? "_callback_#{java_name}_" : java_name}(#{@parameters.map{ |parameter| parameter[:name].to_java_downcase }.join(', ')})"
    @parameters.each do |parameter|
      writer.write_description parameter[:description], false, "@param [#{parameter[:type].java_description}] #{parameter[:name].to_java_downcase} ", "  "
    end
    writer.write_description @return_value_description, false, "@return [#{@return_type.java_description}] ", "  "
    writer.puts "@scope class"
  end
  
  jna_signature = "#{@parameters.map{ |parameter| "#{parameter[:type].java_jna_type} #{parameter[:name].to_java_downcase}" }.join(', ')}"
  if @is_callback
    writer.puts "callback :#{java_name}, #{jna_signature}", ""
  else
    writer.puts "@NativeName(\"#{@name.raw}\")", "#{@return_type.java_jna_type} #{java_name}(#{jna_signature});", ""
  end
end

#write_ruby(writer) ⇒ Object



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/ffi_gen/ruby_output.rb', line 147

def write_ruby(writer)
  writer.puts "@blocking = true" if @blocking
  writer.comment do
    writer.write_description @function_description
    writer.puts "", "<em>This entry is only for documentation and no real method.</em>" if @is_callback
    writer.puts "", "@method #{@is_callback ? "_callback_#{ruby_name}_" : ruby_name}(#{@parameters.map{ |parameter| parameter[:name].to_ruby_downcase }.join(', ')})"
    @parameters.each do |parameter|
      writer.write_description parameter[:description], false, "@param [#{parameter[:type].ruby_description}] #{parameter[:name].to_ruby_downcase} ", "  "
    end
    writer.write_description @return_value_description, false, "@return [#{@return_type.ruby_description}] ", "  "
    writer.puts "@scope class"
  end

  ffi_signature = "[#{@parameters.map{ |parameter| parameter[:type].ruby_ffi_type }.join(', ')}], #{@return_type.ruby_ffi_type}"
  if @is_callback
    writer.puts "callback :#{ruby_name}, #{ffi_signature}", ""
  else
    writer.puts "attach_function :#{ruby_name}, :#{@name.raw}, #{ffi_signature}", ""
  end
end