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, = {} ) length = [: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 |