Module: FFI::Library

Defined in:
lib/ffi/enum_generator.rb

Instance Method Summary collapse

Instance Method Details

#generate_enum(name) {|gen| ... } ⇒ FFI::Enum

Note:

Specifying a symbol that isn’t known, will cause assplosions. Specifying a symbol that isn’t an enum value may work, but is not guaranteed to continue to work.

Generate an ‘FFI::Enum` from C enum values

Examples:

A simple example for a days-of-the-week enum


# C:
enum {
  SUNDAY,    # Automatically given the value '0'
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY
}

# Ruby:
enum = FFI::EnumGenerator(:weekdays) do |gen|
  gen.symbol(:MONDAY)
  gen.symbol('TUESDAY')
  gen.symbol(:WEDNESDAY, :WED)  # this enum value's symbol will be :WED
  gen.symbol(:THURSDAY),
  gen.symbol(:FRIDAY)
end

enum.class       # => FFI::Enum
enum[:MONDAY]    # => 1
enum[:TUESDAY]   # => 2
enum[:WED]       # => 3
enum[:WEDNESDAY] # => nil
enum[:ohai]      # => nil

Parameters:

  • name (#to_s)

    The name of the enum to create.

Yield Parameters:

Returns:



50
51
52
# File 'lib/ffi/enum_generator.rb', line 50

def generate_enum(name, &blk)
  enum name, ::FFI::EnumGenerator.new(&blk).generate
end