Class: Erlang::ETF::SmallBig

Inherits:
Object
  • Object
show all
Includes:
Term
Defined in:
lib/erlang/etf/small_big.rb

Overview

1 1 1 n
110 n Sign d(0) ... d(n-1)

Bignums are stored in unary form with a Sign byte that is 0 if the binum is positive and 1 if is negative. The digits are stored with the LSB byte stored first.

To calculate the integer the following formula can be used:

B = 256
(d0*B^0 + d1*B^1 + d2*B^2 + ... d(N-1)*B^(n-1))

(see SMALL_BIG_EXT)

Constant Summary

Constants included from Term

Term::BERT_PREFIX, Term::BIN_LSB_PACK, Term::BIN_MSB_PACK

Instance Method Summary collapse

Methods included from Term

#==, #__erlang_evolve__, #__erlang_type__, included

Constructor Details

#initialize(integer) ⇒ SmallBig

Returns a new instance of SmallBig.



58
59
60
# File 'lib/erlang/etf/small_big.rb', line 58

def initialize(integer)
  @integer = integer
end

Instance Method Details

#__ruby_evolve__Object



62
63
64
# File 'lib/erlang/etf/small_big.rb', line 62

def __ruby_evolve__
  integer
end

#after_serialize_n(buffer) ⇒ Object



45
46
47
# File 'lib/erlang/etf/small_big.rb', line 45

def after_serialize_n(buffer)
  buffer[@n_start, BYTES_8] = serialize_n ""
end

#serialize_integer(buffer) ⇒ Object



36
37
38
39
40
41
# File 'lib/erlang/etf/small_big.rb', line 36

def serialize_integer(buffer)
  start = buffer.bytesize
  buffer << [integer.abs.to_s(2).reverse!].pack(BIN_LSB_PACK)
  self.n = buffer.bytesize - start
  buffer
end