Module: FFI::BitField::Property
- Included in:
- FFI::BitStruct, ManagedBitStruct
- Defined in:
- lib/ffi/bit_field/property.rb
Overview
Properties provides methods to read and write bit fields.
Instance Method Summary collapse
Instance Method Details
#[](member_name) ⇒ Integer
Returns value.
9 10 11 12 13 14 15 16 17 |
# 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) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 |
# 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 ArgumentError, "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 |