Object
Represents a C enum.
For a C enum:
enum fruits { apple, banana, orange, pineapple };
are defined this vocabulary:
a symbol is a word from the enumeration (ie. apple, by example);
a value is the value of a symbol in the enumeration (by example, apple has value 0 and banana 1).
@param [nil, Enumerable] info @param tag enum tag
# File lib/ffi/enum.rb, line 80 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 raise ArgumentError, "duplicate enum key" if @kv_map.has_key?(i) @kv_map[i] = value last_cst = i value += 1 when Integer @kv_map[last_cst] = i value = i+1 end end end @vk_map = @kv_map.invert end
Get a symbol or a value from the enum. @overload [](query)
Get enum value from symbol. @param [Symbol] query @return [Integer]
@overload [](query)
Get enum symbol from value. @param [Integer] query @return [Symbol]
# File lib/ffi/enum.rb, line 116 def [](query) case query when Symbol @kv_map[query] when Integer @vk_map[query] end end
@param val @return symbol name if it exists for val.
# File lib/ffi/enum.rb, line 156 def from_native(val, ctx) @vk_map[val] || val end
Get native type of Enum @return [Type::INT]
# File lib/ffi/enum.rb, line 137 def native_type Type::INT end
Get the symbol map. @return [Hash]
# File lib/ffi/enum.rb, line 128 def symbol_map @kv_map end
@return [Array] enum symbol names
# File lib/ffi/enum.rb, line 103 def symbols @kv_map.keys end
@param [Symbol, Integer, to_int] val @param ctx unused @return [Integer] value of a enum symbol
# File lib/ffi/enum.rb, line 144 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
Generated with the Darkfish Rdoc Generator 2.