Module: Erlang::ETF::Extensions::Integer

Defined in:
lib/erlang/etf/extensions/integer.rb

Constant Summary collapse

UINT8_MIN =
0.freeze
UINT8_MAX =
(+(1 << 8) - 1).freeze
INT32_MIN =
(-(1 << 31) + 1).freeze
INT32_MAX =
(+(1 << 31) - 1).freeze
SMALL_BIG_N_MAX =
255.freeze

Instance Method Summary collapse

Instance Method Details

#__erlang_evolve__Object



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/erlang/etf/extensions/integer.rb', line 30

def __erlang_evolve__
  case __erlang_type__
  when :small_integer
    ETF::SmallInteger.new(self)
  when :integer
    ETF::Integer.new(self)
  when :small_big
    ETF::SmallBig.new(self)
  when :large_big
    ETF::LargeBig.new(self)
  end
end

#__erlang_type__Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/erlang/etf/extensions/integer.rb', line 15

def __erlang_type__
  if self >= UINT8_MIN and self <= UINT8_MAX
    :small_integer
  elsif self >= INT32_MIN and self <= INT32_MAX
    :integer
  else
    n = (abs.to_s(2).bytesize / 8.0).ceil
    if n <= SMALL_BIG_N_MAX
      :small_big
    else
      :large_big
    end
  end
end