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