class AdLint::Cc1::ScalarValue

Attributes

domain[R]

Public Class Methods

new(domain) click to toggle source
# File lib/adlint/cc1/value.rb, line 472
def initialize(domain)
  @domain = domain
end

Public Instance Methods

!() click to toggle source
# File lib/adlint/cc1/value.rb, line 655
def !
  ScalarValue.new(!@domain)
end
!=(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 686
def !=(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain != rhs_sval.domain)
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
%(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 601
def %(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain % rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
&(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 610
def &(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain & rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
*(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 583
def *(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain * rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
+(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 565
def +(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain + rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
+@() click to toggle source
# File lib/adlint/cc1/value.rb, line 557
def +@
  ScalarValue.new(+@domain)
end
-(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 574
def -(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain - rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
-@() click to toggle source
# File lib/adlint/cc1/value.rb, line 561
def -@
  ScalarValue.new(-@domain)
end
/(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 592
def /(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain / rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
<(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 659
def <(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain < rhs_sval.domain)
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
<<(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 637
def <<(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain << rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
<=(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 695
def <=(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain <= rhs_sval.domain)
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
==(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 677
def ==(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain == rhs_sval.domain)
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
>(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 668
def >(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain > rhs_sval.domain)
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
>=(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 704
def >=(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain >= rhs_sval.domain)
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
>>(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 646
def >>(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain >> rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
^(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 628
def ^(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain ^ rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
ambiguous?() click to toggle source
# File lib/adlint/cc1/value.rb, line 509
def ambiguous?
  @domain.ambiguous?
end
array?() click to toggle source
# File lib/adlint/cc1/value.rb, line 480
def array?
  false
end
coerce_to(type) click to toggle source
# File lib/adlint/cc1/value.rb, line 849
def coerce_to(type)
  type.coerce_scalar_value(self)
end
composite?() click to toggle source
# File lib/adlint/cc1/value.rb, line 484
def composite?
  false
end
contain?(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 496
def contain?(val)
  case sval = val.to_single_value
  when ScalarValue
    @domain.contain?(sval.domain)
  else
    false
  end
end
definite?() click to toggle source
# File lib/adlint/cc1/value.rb, line 492
def definite?
  @domain.kind_of?(EqualToValueDomain)
end
dup() click to toggle source
# File lib/adlint/cc1/value.rb, line 869
def dup
  ScalarValue.new(@domain)
end
eql?(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 861
def eql?(rhs_val)
  rhs_val.kind_of?(ScalarValue) && @domain.eql?(rhs_val.domain)
end
exist?() click to toggle source
# File lib/adlint/cc1/value.rb, line 488
def exist?
  !@domain.empty?
end
hash() click to toggle source
# File lib/adlint/cc1/value.rb, line 865
def hash
  @domain.hash
end
invert_domain!() click to toggle source
# File lib/adlint/cc1/value.rb, line 540
def invert_domain!
  @domain = @domain.inversion
end
logical_and(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 713
def logical_and(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain.logical_and(rhs_sval.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
logical_or(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 722
def logical_or(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain.logical_or(rhs_sval.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
narrow_domain!(op, ope_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 522
def narrow_domain!(op, ope_val)
  case ope_sval = ope_val.to_single_value
  when ScalarValue
    @domain = @domain.narrow(op, ope_sval.domain)
  else
    raise TypeError, "cannot narrow scalar value domain with non-scalar."
  end
end
overwrite!(val, *) click to toggle source
# File lib/adlint/cc1/value.rb, line 513
def overwrite!(val, *)
  case sval = val.to_single_value
  when ScalarValue
    @domain = sval.domain
  else
    raise TypeError, "cannot overwrite scalar with non-scalar."
  end
end
scalar?() click to toggle source
# File lib/adlint/cc1/value.rb, line 476
def scalar?
  true
end
single_value_unified_with(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 544
def single_value_unified_with(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain.union(rhs_sval.domain))
  else
    raise TypeError, "cannot unify scalar value with non-scalar."
  end
end
test_may_be_equal_to(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 746
def test_may_be_equal_to(val)
  case sval = val.to_single_value
  when ScalarValue
    TrivialValueTest.new(
      (self == sval).domain.intersect?(scalar_value_of_true.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
test_may_be_false() click to toggle source
# File lib/adlint/cc1/value.rb, line 845
def test_may_be_false
  test_may_be_equal_to(scalar_value_of_false)
end
test_may_be_greater_than(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 813
def test_may_be_greater_than(val)
  case sval = val.to_single_value
  when ScalarValue
    TrivialValueTest.new(
      (self > sval).domain.intersect?(scalar_value_of_true.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
test_may_be_less_than(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 791
def test_may_be_less_than(val)
  case sval = val.to_single_value
  when ScalarValue
    TrivialValueTest.new(
      (self < sval).domain.intersect?(scalar_value_of_true.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
test_may_be_null() click to toggle source
# File lib/adlint/cc1/value.rb, line 827
def test_may_be_null
  test_may_be_equal_to(scalar_value_of_null)
end
test_may_be_true() click to toggle source
# File lib/adlint/cc1/value.rb, line 837
def test_may_be_true
  test_may_be_equal_to(scalar_value_of_true)
end
test_may_not_be_equal_to(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 769
def test_may_not_be_equal_to(val)
  case sval = val.to_single_value
  when ScalarValue
    TrivialValueTest.new(
      (self != sval).domain.intersect?(scalar_value_of_true.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
test_must_be_equal_to(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 731
def test_must_be_equal_to(val)
  case sval = val.to_single_value.dup
  when ScalarValue
    comp_val = (self == sval)
    sval.invert_domain!
    sval.narrow_domain!(Operator::EQ, self)
    TrivialValueTest.new(
      comp_val.domain.intersect?(scalar_value_of_true.domain) &&
      !comp_val.domain.contain?(scalar_value_of_false.domain) &&
      !@domain.intersect?(sval.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
test_must_be_false() click to toggle source
# File lib/adlint/cc1/value.rb, line 841
def test_must_be_false
  test_must_be_equal_to(scalar_value_of_false)
end
test_must_be_greater_than(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 801
def test_must_be_greater_than(val)
  case sval = val.to_single_value
  when ScalarValue
    comp_val = (self > sval)
    TrivialValueTest.new(
      comp_val.domain.intersect?(scalar_value_of_true.domain) &&
      !comp_val.domain.contain?(scalar_value_of_false.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
test_must_be_less_than(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 779
def test_must_be_less_than(val)
  case sval = val.to_single_value
  when ScalarValue
    comp_val = (self < sval)
    TrivialValueTest.new(
      comp_val.domain.intersect?(scalar_value_of_true.domain) &&
      !comp_val.domain.contain?(scalar_value_of_false.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
test_must_be_null() click to toggle source
# File lib/adlint/cc1/value.rb, line 823
def test_must_be_null
  test_must_be_equal_to(scalar_value_of_null)
end
test_must_be_true() click to toggle source
# File lib/adlint/cc1/value.rb, line 831
def test_must_be_true
  TrivialValueTest.new(
    test_may_be_equal_to(scalar_value_of_true).true? &&
    test_must_not_be_equal_to(scalar_value_of_false).true?)
end
test_must_not_be_equal_to(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 756
def test_must_not_be_equal_to(val)
  case sval = val.to_single_value
  when ScalarValue
    comp_val = (self != sval)
    TrivialValueTest.new(
      comp_val.domain.intersect?(scalar_value_of_true.domain) &&
      !comp_val.domain.contain?(scalar_value_of_false.domain) &&
      !@domain.intersect?(sval.domain))
  else
    raise TypeError, "comparison between scalar and non-scalar."
  end
end
to_defined_value() click to toggle source
# File lib/adlint/cc1/value.rb, line 857
def to_defined_value
  ScalarValue.new(@domain.to_defined_domain)
end
to_enum() click to toggle source
# File lib/adlint/cc1/value.rb, line 853
def to_enum
  @domain.each_sample
end
undefined?() click to toggle source
# File lib/adlint/cc1/value.rb, line 505
def undefined?
  @domain.undefined?
end
widen_domain!(op, ope_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 531
def widen_domain!(op, ope_val)
  case ope_sval = ope_val.to_single_value
  when ScalarValue
    @domain = @domain.widen(op, ope_sval.domain)
  else
    raise TypeError, "cannot widen scalar value domain with non-scalar."
  end
end
|(rhs_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 619
def |(rhs_val)
  case rhs_sval = rhs_val.to_single_value
  when ScalarValue
    ScalarValue.new(@domain | rhs_sval.domain)
  else
    raise TypeError, "binary operation between scalar and non-scalar."
  end
end
~() click to toggle source
# File lib/adlint/cc1/value.rb, line 553
def ~
  ScalarValue.new(~@domain)
end

Private Instance Methods

logical_shr?() click to toggle source
# File lib/adlint/cc1/value.rb, line 877
def logical_shr?
  @domain.logical_shr?
end