class FFIGen::Enum

Attributes

name[RW]

Public Class Methods

new(generator, name, constants, description) click to toggle source
# File lib/ffi_gen.rb, line 81
def initialize(generator, name, constants, description)
  @generator = generator
  @name = name
  @constants = constants
  @description = description
end

Public Instance Methods

java_description() click to toggle source
# File lib/ffi_gen/java_output.rb, line 102
def java_description
  "Symbol from _enum_#{java_name}_"
end
java_jna_type() click to toggle source
# File lib/ffi_gen/java_output.rb, line 98
def java_jna_type
  java_name
end
java_name() click to toggle source
# File lib/ffi_gen/java_output.rb, line 94
def java_name
  @java_name ||= @name.to_java_classname
end
ruby_description() click to toggle source
# File lib/ffi_gen/ruby_output.rb, line 77
def ruby_description
  "Symbol from _enum_#{ruby_name}_"
end
ruby_ffi_type() click to toggle source
# File lib/ffi_gen/ruby_output.rb, line 73
def ruby_ffi_type
  ":#{ruby_name}"
end
ruby_name() click to toggle source
# File lib/ffi_gen/ruby_output.rb, line 69
def ruby_name
  @ruby_name ||= @name.to_ruby_downcase
end
shorten_names() click to toggle source
# File lib/ffi_gen.rb, line 88
def shorten_names
  return if @constants.size < 2
  names = @constants.map { |constant| constant[:name].parts }
  names.each(&:shift) while names.map(&:first).uniq.size == 1 and @name.parts.map(&:downcase).include? names.first.first.downcase
  names.each(&:pop) while names.map(&:last).uniq.size == 1 and @name.parts.map(&:downcase).include? names.first.last.downcase
end
write_java(writer) click to toggle source
# File lib/ffi_gen/java_output.rb, line 67
def write_java(writer)
  return if @name.nil?
  shorten_names
  
  writer.comment do
    writer.write_description @description
    writer.puts "", "<em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:#{java_name}).</em>"
    writer.puts "", "=== Options:"
    @constants.each do |constant|
      writer.puts "#{constant[:name].to_java_constant} ::"
      writer.write_description constant[:comment], false, "  ", "  "
    end
    writer.puts "", "@method _enum_#{java_name}_", "@return [Symbol]", "@scope class"
  end
  
  writer.puts "public enum #{java_name} implements NativeEnum {"
  writer.indent do
    writer.write_array @constants, "," do |constant|
      "#{constant[:name].to_java_constant}(#{constant[:value]})"
    end
    writer.puts ";"
    
    writer.puts "", "private int nativeInt;", "", "private #{java_name}(int nativeInt) {", "    this.nativeInt = nativeInt;", "}", "", "@Override", "public int toNativeInt() {", "    return nativeInt;", "}"
  end
  writer.puts "}", ""
end
write_ruby(writer) click to toggle source
# File lib/ffi_gen/ruby_output.rb, line 41
def write_ruby(writer)
  return if @name.nil?
  shorten_names

  @constants.each do |constant|
    constant[:symbol] = ":#{constant[:name].to_ruby_downcase}"
  end

  writer.comment do
    writer.write_description @description
    writer.puts "", "<em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:#{ruby_name}).</em>"
    writer.puts "", "=== Options:"
    @constants.each do |constant|
      writer.puts "#{constant[:symbol]} ::"
      writer.write_description constant[:comment], false, "  ", "  "
    end
    writer.puts "", "@method _enum_#{ruby_name}_", "@return [Symbol]", "@scope class"
  end

  writer.puts "enum :#{ruby_name}, ["
  writer.indent do
    writer.write_array @constants, "," do |constant|
      "#{constant[:symbol]}, #{constant[:value]}"
    end
  end
  writer.puts "]", ""
end