Class: Etherlite::Types::Fixed
- Inherits:
-
Base
- Object
- Base
- Etherlite::Types::Fixed
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
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
|
#signature ⇒ Object
18
19
20
|
# File 'lib/etherlite/types/fixed.rb', line 18
def signature
"#{@signed ? 'fixed' : 'ufixed'}#{@size_m}x#{@size_n}"
end
|
#size ⇒ Object
14
15
16
|
# File 'lib/etherlite/types/fixed.rb', line 14
def size
32
end
|