module FFI::BitField::Property
Properties provides methods to read and write bit fields.
Public Instance Methods
[](member_name)
click to toggle source
@param [Symbol] member_name @return [Integer] value
# File lib/ffi/bit_field/property.rb, line 9 def [](member_name) parent_name, start, width = member_value_info(member_name) if parent_name value = get_member_value(parent_name) value[start, width] else get_member_value(member_name) end end
[]=(member_name, value)
click to toggle source
# File lib/ffi/bit_field/property.rb, line 19 def []=(member_name, value) parent_name, start, width = member_value_info(member_name) if parent_name raise "Value #{value} is larger than bit_length: #{width}" if value.bit_length > width parent_value = get_member_value(parent_name) new_value = (((1 << width) - 1 << start) & parent_value ^ parent_value) | (value << start) set_member_value(parent_name, new_value) else set_member_value(member_name, value) end end
Private Instance Methods
member_value_info(member_name)
click to toggle source
# File lib/ffi/bit_field/property.rb, line 35 def member_value_info(member_name) self.class.instance_variable_get(:@bit_field_hash_table)[member_name] end