class BOAST::Mask

Attributes

length[R]
pos_values[R]
value[R]

Public Class Methods

new( values, options = {} ) click to toggle source
# 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

Public Instance Methods

empty?() click to toggle source
# File lib/BOAST/Language/Operators.rb, line 334
def empty?
  if @pos_values then
    return @pos_values == 0
  else
    return false
  end
end
full?() click to toggle source
# File lib/BOAST/Language/Operators.rb, line 342
def full?
  if @pos_values and @length
    return @pos_values == @length
  else
    return false
  end
end
to_s() click to toggle source
# File lib/BOAST/Language/Operators.rb, line 373
def to_s
  return @value.to_s
end
to_var() click to toggle source
# File lib/BOAST/Language/Operators.rb, line 377
def to_var
  return @value
end