Class: Etherlite::Types::Fixed

Inherits:
Base
  • Object
show all
Defined in:
lib/etherlite/types/fixed.rb

Instance Method Summary collapse

Methods inherited from Base

#decode, #dynamic?, #fixed?

Constructor Details

#initialize(_signed, _size_m, _size_n) ⇒ Fixed

Returns a new instance of Fixed.



3
4
5
6
7
8
9
10
11
12
# 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

Instance Method Details

#encode(_value) ⇒ Object

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
29
30
# 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

#signatureObject



18
19
20
# File 'lib/etherlite/types/fixed.rb', line 18

def signature
  "#{@signed ? 'fixed' : 'ufixed'}#{@size_m}x#{@size_n}"
end

#sizeObject



14
15
16
# File 'lib/etherlite/types/fixed.rb', line 14

def size
  32
end