Class: FFIGen::FunctionOrCallback
- Inherits:
-
Object
- Object
- FFIGen::FunctionOrCallback
- Defined in:
- lib/ffi_gen.rb,
lib/ffi_gen/java_output.rb,
lib/ffi_gen/ruby_output.rb
Instance Attribute Summary collapse
-
#comment ⇒ Object
readonly
Returns the value of attribute comment.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#parameters ⇒ Object
readonly
Returns the value of attribute parameters.
-
#return_type ⇒ Object
Returns the value of attribute return_type.
Instance Method Summary collapse
-
#initialize(generator, name, is_callback, blocking, comment) ⇒ FunctionOrCallback
constructor
A new instance of FunctionOrCallback.
- #java_name ⇒ Object
- #ruby_name ⇒ Object
- #write_java(writer) ⇒ Object
- #write_ruby(writer) ⇒ Object
Constructor Details
#initialize(generator, name, is_callback, blocking, comment) ⇒ FunctionOrCallback
Returns a new instance of FunctionOrCallback.
113 114 115 116 117 118 119 120 |
# File 'lib/ffi_gen.rb', line 113 def initialize(generator, name, is_callback, blocking, comment) @generator = generator @name = name @parameters = [] @is_callback = is_callback @blocking = blocking @comment = comment end |
Instance Attribute Details
#comment ⇒ Object (readonly)
Returns the value of attribute comment.
110 111 112 |
# File 'lib/ffi_gen.rb', line 110 def comment @comment end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
110 111 112 |
# File 'lib/ffi_gen.rb', line 110 def name @name end |
#parameters ⇒ Object (readonly)
Returns the value of attribute parameters.
110 111 112 |
# File 'lib/ffi_gen.rb', line 110 def parameters @parameters end |
#return_type ⇒ Object
Returns the value of attribute return_type.
111 112 113 |
# File 'lib/ffi_gen.rb', line 111 def return_type @return_type end |
Instance Method Details
#java_name ⇒ Object
232 233 234 |
# File 'lib/ffi_gen/java_output.rb', line 232 def java_name @java_name ||= @name.to_java_downcase end |
#ruby_name ⇒ Object
241 242 243 |
# File 'lib/ffi_gen/ruby_output.rb', line 241 def ruby_name @ruby_name ||= @name.to_ruby_downcase end |
#write_java(writer) ⇒ Object
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/ffi_gen/java_output.rb', line 186 def write_java(writer) return if @is_callback # not yet supported @parameters.each do |parameter| parameter[:type_data] = @generator.to_java_type parameter[:type], parameter[:is_array] parameter[:java_name] = !parameter[:name].empty? ? parameter[:name].to_java_downcase : parameter[:type_data][:parameter_name] parameter[:description] = [] end return_type_data = @generator.to_java_type @return_type function_description = [] return_value_description = [] current_description = function_description @comment.split("\n").map do |line| line = writer.prepare_comment_line line if line.gsub!(/\\param (.*?) /, '') parameter = @parameters.find { |p| p[:name].raw == $1 } if parameter current_description = parameter[:description] else current_description << "#{$1}: " end end current_description = return_value_description if line.gsub! '\\returns ', '' current_description << line end 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[:java_name] }.join(', ')})" @parameters.each do |parameter| writer.write_description parameter[:description], false, "@param [#{parameter[:type_data][:description]}] #{parameter[:java_name]} ", " " end writer.write_description return_value_description, false, "@return [#{return_type_data[:description]}] ", " " writer.puts "@scope class" end jna_signature = "#{@parameters.map{ |parameter| "#{parameter[:type_data][:jna_type]} #{parameter[:java_name]}" }.join(', ')}" if @is_callback writer.puts "callback :#{java_name}, #{jna_signature}", "" else writer.puts "@NativeName(\"#{@name.raw}\")", "#{return_type_data[:jna_type]} #{java_name}(#{jna_signature});", "" end end |
#write_ruby(writer) ⇒ Object
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/ffi_gen/ruby_output.rb', line 196 def write_ruby(writer) @parameters.each do |parameter| parameter[:type_data] = @generator.to_ruby_type parameter[:type] parameter[:ruby_name] = !parameter[:name].empty? ? parameter[:name].to_ruby_downcase : parameter[:type_data][:parameter_name] parameter[:description] = [] end return_type_data = @generator.to_ruby_type @return_type function_description = [] return_value_description = [] current_description = function_description @comment.split("\n").map do |line| line = writer.prepare_comment_line line if line.gsub!(/\\param (.*?) /, '') parameter = @parameters.find { |p| p[:name].raw == $1 } if parameter current_description = parameter[:description] else current_description << "#{$1}: " end end current_description = return_value_description if line.gsub! '\\returns ', '' current_description << line end 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[:ruby_name] }.join(', ')})" @parameters.each do |parameter| writer.write_description parameter[:description], false, "@param [#{parameter[:type_data][:description]}] #{parameter[:ruby_name]} ", " " end writer.write_description return_value_description, false, "@return [#{return_type_data[:description]}] ", " " writer.puts "@scope class" end ffi_signature = "[#{@parameters.map{ |parameter| parameter[:type_data][:ffi_type] }.join(', ')}], #{return_type_data[: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 |