class Cosmos::MultiFieldBitConversion
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
# File lib/cosmos/multi_field_bit_conversion.rb, line 5 def initialize(*args) super() @fields = args end
Public Instance Methods
call(value, packet, buffer)
click to toggle source
# 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