# File lib/ffi/enum.rb, line 57 def initialize(info, tag=nil) @tag = tag @kv_map = Hash.new unless info.nil? last_cst = nil value = 0 info.each do |i| case i when Symbol @kv_map[i] = value last_cst = i value += 1 when Integer @kv_map[last_cst] = i value = i+1 end end end @vk_map = Hash[@kv_map.map{|k,v| [v,k]}] end
# File lib/ffi/enum.rb, line 82 def [](query) case query when Symbol @kv_map[query] when Integer @vk_map[query] end end
# File lib/ffi/enum.rb, line 113 def from_native(val, ctx) @vk_map[val] || val end
# File lib/ffi/enum.rb, line 99 def native_type Type::INT end
# File lib/ffi/enum.rb, line 92 def symbol_map @kv_map end
# File lib/ffi/enum.rb, line 78 def symbols @kv_map.keys end
# File lib/ffi/enum.rb, line 103 def to_native(val, ctx) @kv_map[val] || if val.is_a?(Integer) val elsif val.respond_to?(:to_int) val.to_int else raise ArgumentError, "invalid enum value, #{val.inspect}" end end