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