# File lib/ffi/library.rb, line 174
  def enum(*args)
    #
    # enum can be called as:
    # enum :zero, :one, :two  # unnamed enum
    # enum [ :zero, :one, :two ] # equivalent to above
    # enum :foo, [ :zero, :one, :two ] create an enum named :foo
    #
    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 = FFI::Enum.new(values, name))

    # If called as enum :foo, [ :zero, :one, :two ], add a typedef alias
    typedef(e, name) if name
    e
  end