Module: FFI::Library

Defined in:
lib/ffi/bitmask.rb

Instance Method Summary collapse

Instance Method Details

#bitmask(name, values) ⇒ FFI::Bitmask #bitmask(*args) ⇒ FFI::Bitmask #bitmask(values) ⇒ FFI::Bitmask #bitmask(native_type, name, values) ⇒ FFI::Bitmask #bitmask(native_type, *args) ⇒ FFI::Bitmask #bitmask(native_type, values) ⇒ FFI::Bitmask

Create a new FFI::Bitmask

Overloads:

  • #bitmask(name, values) ⇒ FFI::Bitmask

    Create a named bitmask

    Examples:

    bitmask :foo, [:red, :green, :blue] # bits 0,1,2 are used
    bitmask :foo, [:red, :green, 5, :blue] # bits 0,5,6 are used
    

    Parameters:

    • name (Symbol)

      for new bitmask

    • values (Array<Symbol, Integer>)

      for new bitmask

  • #bitmask(*args) ⇒ FFI::Bitmask

    Create an unamed bitmask

    Examples:

    bm = bitmask :red, :green, :blue # bits 0,1,2 are used
    bm = bitmask :red, :green, 5, blue # bits 0,5,6 are used
    

    Parameters:

    • args (Symbol, Integer)

      values for new bitmask

  • #bitmask(values) ⇒ FFI::Bitmask

    Create an unamed bitmask

    Examples:

    bm = bitmask [:red, :green, :blue] # bits 0,1,2 are used
    bm = bitmask [:red, :green, 5, blue] # bits 0,5,6 are used
    

    Parameters:

    • values (Array<Symbol, Integer>)

      for new bitmask

  • #bitmask(native_type, name, values) ⇒ FFI::Bitmask

    Create a named enum and specify the native type.

    Examples:

    bitmask FFI::Type::UINT64, :foo, [:red, :green, :blue]
    

    Parameters:

    • native_type (FFI::Type)

      native type for new bitmask

    • name (Symbol)

      for new bitmask

    • values (Array<Symbol, Integer>)

      for new bitmask

  • #bitmask(native_type, *args) ⇒ FFI::Bitmask

    Examples:

    bitmask FFI::Type::UINT64, :red, :green, :blue
    

    Parameters:

    • native_type (FFI::Type)

      native type for new bitmask

    • args (Symbol, Integer)

      values for new bitmask

  • #bitmask(native_type, values) ⇒ FFI::Bitmask

    Create a named enum and specify the native type.

    Examples:

    bitmask FFI::Type::UINT64, [:red, :green, :blue]
    

    Parameters:

    • native_type (FFI::Type)

      native type for new bitmask

    • values (Array<Symbol, Integer>)

      for new bitmask

Returns:



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ffi/bitmask.rb', line 46

def bitmask(*args)
  native_type = args.first.kind_of?(FFI::Type) ? args.shift : nil
  name, values = if args[0].kind_of?(Symbol) && args[1].kind_of?(Array)
    [ args[0], args[1] ]
  elsif args[0].kind_of?(Array)
    [ nil, args[0] ]
  else
    [ nil, args ]
  end
  @ffi_enums = FFI::Enums.new unless defined?(@ffi_enums)
  @ffi_enums << (e = native_type ? FFI::Bitmask.new(native_type, values, name) : FFI::Bitmask.new(values, name))

  typedef(e, name) if name
  e
end