Class: Cosmos::MultiFieldBitConversion
- Inherits:
-
Conversion
- Object
- Conversion
- Cosmos::MultiFieldBitConversion
- Defined in:
- lib/cosmos/multi_field_bit_conversion.rb
Instance Method Summary collapse
- #call(value, packet, buffer) ⇒ Object
-
#initialize(*args) ⇒ MultiFieldBitConversion
constructor
A new instance of MultiFieldBitConversion.
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 |