Method: BOAST::Mask#initialize

Defined in:
lib/BOAST/Language/Operators.rb

#initialize(values, options = {}) ⇒ Mask

Returns a new instance of Mask.



350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
# File 'lib/BOAST/Language/Operators.rb', line 350

def initialize( values, options = {} )
  length = options[:length]
  if values.kind_of?(Mask) then
    raise OperatorError, "Wrong number of mask values (#{values.length} for #{length})!" if length and values.length and values.length != length
    @value = values.value
    @length = length ? length : values.length
    @pos_values = values.pos_values
  elsif values.kind_of?(Array) then
    raise OperatorError, "Wrong number of mask values (#{values.length} for #{length})!" if length and values.length != length
    s = "0x"
    s << values.collect { |v| v != 0 ? 1 : 0 }.reverse.join
    @value = Int( s, :signed => false, :size => values.length / 8 + ( values.length % 8 > 0 ? 1 : 0 ), :constant => s )
    @length = values.length
    @pos_values = values.reject { |e| e == 0 }.length
  elsif values.kind_of?(Variable) and values.type.kind_of?(Int) then
    raise OperatorError, "Wrong mask size (#{values.type.size} for #{length / 8 + ( length % 8 > 0 ? 1 : 0 )})!" if length and values.type.size != length / 8 + ( length % 8 > 0 ? 1 : 0 )
    @value = values
    @length = length if length
  else
    raise OperatorError, "Illegal valuess for mask (#{values.class}), expecting Array of Int!"
  end
end