Method: CTypes::Enum#initialize

Defined in:
lib/ctypes/enum.rb

#initialize(type = Helpers.uint32, values = nil, permissive: false, &block) ⇒ Enum

Returns a new instance of Enum.

Examples:

contiguous 32-bit enum

Enum.new([:a, :b, :c])
Enum.new(i[a b c])

contiguous 8-bit enum

Enum.new(:uint8, i[a b c])

sparse enum

Enum.new({a: 46, b: 789})

16-bit sparse enum

Enum.new(UInt16, {a: 46, b: 789})

8-bit sparse enum

Enum.new(Uint8) do |e|
  e << i{zero one two}         # define 0, 1, 2
  e << {eighty: 80}             # skip 3-79 (incl), define 80
  e << :eighty_one
  e << {a: 100, b: 200}         # define multiple sparse values
end

dynamically generated enum

Enum.new do |e|
  # declare state_0 through state_31
  32.times do |i|
    e << "state_#{i}"
  end
end

See Also:



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/ctypes/enum.rb', line 64

def initialize(type = Helpers.uint32, values = nil, permissive: false,
  &block)
  builder = if block
    Builder.new(&block)
  else
    if values.nil?
      values = type
      type = Helpers.uint32
    end

    Builder.new { |b| b << values }
  end

  @dry_type = Dry::Types["symbol"]
    .default(builder.default)
    .enum(builder.map)
  @type = type
  @size = @type.size
  @dry_type = @dry_type.lax if permissive
end