Class: RLTK::CG::ConstantInteger Abstract
- Inherits:
-
ConstantNumber
- Object
- Value
- User
- Constant
- ConstantNumber
- RLTK::CG::ConstantInteger
- Includes:
- Filigree::AbstractClass
- Defined in:
- lib/rltk/cg/value.rb
Overview
All integer constants inherit from this class.
Instance Attribute Summary collapse
-
#signed ⇒ Boolean
readonly
If the integer is signed or not.
Attributes included from BindingClass
Instance Method Summary collapse
-
#%(rhs) ⇒ ConstantInteger
Modulo this value by another value.
-
#*(rhs) ⇒ ConstantInteger
Multiply this value with another value.
-
#+(rhs) ⇒ ConstantInteger
Add this value with another value.
-
#-(rhs) ⇒ ConstantInteger
Subtract a value from this value.
-
#-@ ⇒ ConstantInteger
Negate this value.
-
#/(rhs) ⇒ ConstantInteger
Divide this value by another value.
-
#and(rhs) ⇒ ConstantInteger
Bitwise AND this value with another.
-
#ashr(bits) ⇒ ConstantInteger
(also: #>>)
Arithmetic right shift.
-
#cast(type, signed = true) ⇒ ConstantNumber
Cast this constant integer to another number type.
-
#cmp(pred, rhs) ⇒ Int1
Compare this value to another value.
-
#extact_sdiv(rhs) ⇒ ConstantInteger
Divide this value by another value.
-
#initialize(overloaded0 = nil, overloaded1 = nil, size = nil) ⇒ ConstantInteger
constructor
The constructor for ConstantInteger’s various sub-classes.
-
#lshr(bits) ⇒ ConstantInteger
Logical right shift.
-
#not ⇒ ConstantInteger
Bitwise NOT this value.
-
#nsw_add(rhs) ⇒ ConstantInteger
Add this value with another value.
-
#nsw_mul(rhs) ⇒ ConstantInteger
Multiply this value with another value.
-
#nsw_neg ⇒ ConstantInteger
Negate this value.
-
#nsw_sub(rhs) ⇒ ConstantInteger
Subtract a value from this value.
-
#nuw_add(rhs) ⇒ ConstantInteger
Add this value with another value.
-
#nuw_mul(rhs) ⇒ ConstantInteger
Multiply this value with another value.
-
#nuw_neg ⇒ ConstantInteger
Negate this value.
-
#nuw_sub(rhs) ⇒ ConstantInteger
Subtract a value from this value.
-
#or(rhs) ⇒ ConstantInteger
Bitwise OR this value with another.
-
#shift(dir, bits, mode = :arithmetic) ⇒ ConstantInteger
A wrapper method around the #shift_left and #shift_right methods.
-
#shift_left(bits) ⇒ ConstantInteger
(also: #shl, #<<)
Shift the value left a specific number of bits.
-
#shift_right(bits, mode = :arithmetic) ⇒ ConstantInteger
Shift the value right a specific number of bits.
-
#to_f(type) ⇒ ConstantReal
Convert this integer to a float.
-
#udiv(rhs) ⇒ ConstantInteger
Divide this value by another value.
-
#urem(rhs) ⇒ ConstantInteger
Modulo this value by another value.
-
#value(extension = :sign) ⇒ Integer
Get the value of this constant as a signed or unsigned long long.
-
#xor(rhs) ⇒ ConstantInteger
Bitwise XOR this value with another.
Methods inherited from ConstantNumber
Methods inherited from Constant
#addr_space_cast, #bitcast_to, #get_element_ptr, #get_element_ptr_in_bounds
Methods inherited from User
Methods inherited from Value
#==, #attributes, #bitcast, #constant?, #dump, #hash, #name, #name=, #null?, #print, #trunc, #trunc_or_bitcast, #type, #undefined?, #zextend, #zextend_or_bitcast
Methods included from BindingClass
Constructor Details
#initialize(overloaded0 = nil, overloaded1 = nil, size = nil) ⇒ ConstantInteger
The constructor for ConstantInteger’s various sub-classes. This constructor is a bit complicated due to having two overloaded parameters, but once you see the valid combinations it is a bit simpler.
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 |
# File 'lib/rltk/cg/value.rb', line 574 def initialize(overloaded0 = nil, overloaded1 = nil, size = nil) @ptr = case overloaded0 when FFI::Pointer overloaded0 when Integer @signed = overloaded1 or true Bindings.const_int(self.type, overloaded0, @signed.to_i) when String base = overloaded1 or 10 if size Bindings.const_int_of_string_and_size(self.type, overloaded0, size, base) else Bindings.const_int_of_string(self.type, overloaded0, base) end else @signed = true Bindings.const_all_ones(self.type) end end |
Instance Attribute Details
#signed ⇒ Boolean (readonly)
Returns If the integer is signed or not.
554 555 556 |
# File 'lib/rltk/cg/value.rb', line 554 def signed @signed end |
Instance Method Details
#%(rhs) ⇒ ConstantInteger
Modulo this value by another value. Uses signed modulo.
733 734 735 |
# File 'lib/rltk/cg/value.rb', line 733 def %(rhs) self.class.new(Bindings.const_s_rem(@ptr, rhs)) end |
#*(rhs) ⇒ ConstantInteger
Multiply this value with another value.
673 674 675 |
# File 'lib/rltk/cg/value.rb', line 673 def *(rhs) self.class.new(Bindings.const_mul(@ptr, rhs)) end |
#+(rhs) ⇒ ConstantInteger
Add this value with another value.
611 612 613 |
# File 'lib/rltk/cg/value.rb', line 611 def +(rhs) self.class.new(Bindings.const_add(@ptr, rhs)) end |
#-(rhs) ⇒ ConstantInteger
Subtract a value from this value.
642 643 644 |
# File 'lib/rltk/cg/value.rb', line 642 def -(rhs) self.class.new(Bindings.const_sub(@ptr, rhs)) end |
#-@ ⇒ ConstantInteger
Negate this value.
751 752 753 |
# File 'lib/rltk/cg/value.rb', line 751 def -@ self.class.new(Bindings.const_neg(@ptr)) end |
#/(rhs) ⇒ ConstantInteger
Divide this value by another value. Uses signed division.
704 705 706 |
# File 'lib/rltk/cg/value.rb', line 704 def /(rhs) self.class.new(Bindings.const_s_div(@ptr, rhs)) end |
#and(rhs) ⇒ ConstantInteger
Bitwise AND this value with another.
836 837 838 |
# File 'lib/rltk/cg/value.rb', line 836 def and(rhs) self.class.new(Bindings.const_and(@ptr, rhs)) end |
#ashr(bits) ⇒ ConstantInteger Also known as: >>
Arithmetic right shift.
817 818 819 |
# File 'lib/rltk/cg/value.rb', line 817 def ashr(bits) self.class.new(Bindings.const_a_shr(@ptr, bits)) end |
#cast(type, signed = true) ⇒ ConstantNumber
Cast this constant integer to another number type.
875 876 877 |
# File 'lib/rltk/cg/value.rb', line 875 def cast(type, signed = true) type.value_class.new(Bindings.const_int_cast(@ptr, check_cg_type(type, NumberType), signed.to_i)) end |
#cmp(pred, rhs) ⇒ Int1
Compare this value to another value.
887 888 889 |
# File 'lib/rltk/cg/value.rb', line 887 def cmp(pred, rhs) Int1.new(Bindings.const_i_cmp(pred, @ptr, rhs)) end |
#extact_sdiv(rhs) ⇒ ConstantInteger
Divide this value by another value. Uses exact signed division.
713 714 715 |
# File 'lib/rltk/cg/value.rb', line 713 def extact_sdiv(rhs) self.class.new(Bindings.const_extact_s_div(@ptr, rhs)) end |
#lshr(bits) ⇒ ConstantInteger
Logical right shift.
827 828 829 |
# File 'lib/rltk/cg/value.rb', line 827 def lshr(bits) self.class.new(Bindings.const_l_shr(@ptr, bits)) end |
#not ⇒ ConstantInteger
Bitwise NOT this value.
861 862 863 |
# File 'lib/rltk/cg/value.rb', line 861 def not self.class.new(Bindings.const_not(@ptr)) end |
#nsw_add(rhs) ⇒ ConstantInteger
Add this value with another value. Performs no signed wrap addition.
621 622 623 |
# File 'lib/rltk/cg/value.rb', line 621 def nsw_add(rhs) self.class.new(Bindings.const_nsw_add(@ptr, rhs)) end |
#nsw_mul(rhs) ⇒ ConstantInteger
Multiply this value with another value. Perform no signed wrap multiplication.
683 684 685 |
# File 'lib/rltk/cg/value.rb', line 683 def nsw_mul(rhs) self.class.new(Bindings.const_nsw_mul(@ptr, rhs)) end |
#nsw_neg ⇒ ConstantInteger
Negate this value. Uses no signed wrap negation.
758 759 760 |
# File 'lib/rltk/cg/value.rb', line 758 def nsw_neg self.class.new(Bindings.const_nsw_neg(@ptr)) end |
#nsw_sub(rhs) ⇒ ConstantInteger
Subtract a value from this value. Performs no signed wrap subtraction.
652 653 654 |
# File 'lib/rltk/cg/value.rb', line 652 def nsw_sub(rhs) self.class.new(Bindings.const_nsw_sub(@ptr, rhs)) end |
#nuw_add(rhs) ⇒ ConstantInteger
Add this value with another value. Performs no unsigned wrap addition.
631 632 633 |
# File 'lib/rltk/cg/value.rb', line 631 def nuw_add(rhs) self.class.new(Bindings.const_nuw_add(@ptr, rhs)) end |
#nuw_mul(rhs) ⇒ ConstantInteger
Multiply this value with another value. Perform no unsigned wrap multiplication.
693 694 695 |
# File 'lib/rltk/cg/value.rb', line 693 def nuw_mul(rhs) self.class.new(Bindings.const_nuw_mul(@ptr, rhs)) end |
#nuw_neg ⇒ ConstantInteger
Negate this value. Uses no unsigned wrap negation.
765 766 767 |
# File 'lib/rltk/cg/value.rb', line 765 def nuw_neg self.class.new(Bindings.const_nuw_neg(@ptr)) end |
#nuw_sub(rhs) ⇒ ConstantInteger
Subtract a value from this value. Performs no unsigned wrap subtraction.
662 663 664 |
# File 'lib/rltk/cg/value.rb', line 662 def nuw_sub(rhs) self.class.new(Bindings.const_nuw_sub(@ptr, rhs)) end |
#or(rhs) ⇒ ConstantInteger
Bitwise OR this value with another.
845 846 847 |
# File 'lib/rltk/cg/value.rb', line 845 def or(rhs) self.class.new(Bindings.const_or(@ptr, rhs)) end |
#shift(dir, bits, mode = :arithmetic) ⇒ ConstantInteger
A wrapper method around the #shift_left and #shift_right methods.
781 782 783 784 785 786 |
# File 'lib/rltk/cg/value.rb', line 781 def shift(dir, bits, mode = :arithmetic) case dir when :left then shift_left(bits) when :right then shift_right(bits, mode) end end |
#shift_left(bits) ⇒ ConstantInteger Also known as: shl, <<
Shift the value left a specific number of bits.
793 794 795 |
# File 'lib/rltk/cg/value.rb', line 793 def shift_left(bits) self.class.new(Bindings.const_shl(@ptr, bits)) end |
#shift_right(bits, mode = :arithmetic) ⇒ ConstantInteger
Shift the value right a specific number of bits.
805 806 807 808 809 810 |
# File 'lib/rltk/cg/value.rb', line 805 def shift_right(bits, mode = :arithmetic) case mode when :arithmetic then ashr(bits) when :logical then lshr(bits) end end |
#to_f(type) ⇒ ConstantReal
Convert this integer to a float.
896 897 898 |
# File 'lib/rltk/cg/value.rb', line 896 def to_f(type) type.value_class.new(Bindings.send(@signed ? :const_si_to_fp : :const_ui_to_fp, @ptr, check_cg_type(type, FloatingPointType))) end |
#udiv(rhs) ⇒ ConstantInteger
Divide this value by another value. Uses unsigned division.
722 723 724 |
# File 'lib/rltk/cg/value.rb', line 722 def udiv(rhs) self.class.new(Bindings.const_u_div(@ptr, rhs)) end |
#urem(rhs) ⇒ ConstantInteger
Modulo this value by another value. Uses unsigned modulo.
742 743 744 |
# File 'lib/rltk/cg/value.rb', line 742 def urem(rhs) self.class.new(Bindings.const_u_rem(@ptr, rhs)) end |
#value(extension = :sign) ⇒ Integer
Get the value of this constant as a signed or unsigned long long.
905 906 907 908 909 910 |
# File 'lib/rltk/cg/value.rb', line 905 def value(extension = :sign) case extension when :sign then Bindings.const_int_get_s_ext_value(@ptr) when :zero then Bindings.const_int_get_z_ext_value(@ptr) end end |
#xor(rhs) ⇒ ConstantInteger
Bitwise XOR this value with another.
854 855 856 |
# File 'lib/rltk/cg/value.rb', line 854 def xor(rhs) self.class.new(Bindings.const_xor(@ptr, rhs)) end |