class Etherlite::Types::Fixed
Public Class Methods
new(_signed, _size_m, _size_n)
click to toggle source
# File lib/etherlite/types/fixed.rb, line 3 def initialize(_signed, _size_m, _size_n) unless 0 < (_size_m + _size_n) && (_size_m + _size_n) <= 256 && _size_m % 8 == 0 && _size_n % 8 == 0 raise ArgumentError, "invalid fixed size #{_size_m}x#{_size_n}" end @signed = _signed @size_m = _size_m @size_n = _size_n end
Public Instance Methods
encode(_value)
click to toggle source
# File lib/etherlite/types/fixed.rb, line 22 def encode(_value) raise ArgumentError, "expected a number for #{signature}" unless _value.is_a? Numeric raise ArgumentError, "expected a positive number for #{signature}" if !@signed && _value < 0 norm_value = (_value * (2**@size_n)).floor raise ArgumentError, "value out of bounds #{_value}" if norm_value.abs > maximum @signed ? Etherlite::Utils.int_to_hex(norm_value) : Etherlite::Utils.uint_to_hex(norm_value) end
signature()
click to toggle source
# File lib/etherlite/types/fixed.rb, line 18 def signature "#{@signed ? 'fixed' : 'ufixed'}#{@size_m}x#{@size_n}" end
size()
click to toggle source
# File lib/etherlite/types/fixed.rb, line 14 def size 32 end
Private Instance Methods
maximum()
click to toggle source
# File lib/etherlite/types/fixed.rb, line 34 def maximum 2**(@signed ? (@size_m + @size_n) - 1 : (@size_m + @size_n)) end