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.

Parameters:

  • member_name (Symbol)

Returns:

  • (Integer)

    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