Class: Cosmos::MultiFieldBitConversion

Inherits:
Conversion
  • Object
show all
Defined in:
lib/cosmos/multi_field_bit_conversion.rb

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ MultiFieldBitConversion

Returns a new instance of MultiFieldBitConversion.



5
6
7
8
# File 'lib/cosmos/multi_field_bit_conversion.rb', line 5

def initialize(*args)
  super()
  @fields = args
end

Instance Method Details

#call(value, packet, buffer) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/cosmos/multi_field_bit_conversion.rb', line 10

def call(value, packet, buffer)      
  return 0 if @fields.empty?

  items = @fields.map {|f| packet.get_item(f)} 
  type = items.map{|i| i.data_type }.uniq.first
  size = items.map{|i| i.bit_size }.sum

  @converted_type = type 
  @converted_bit_size = size

  items.reduce(0) do |acc, item|
    shifted = acc << item.bit_size
    shifted|packet.read(item.name)
  end
end