erlang-etf 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +49 -0
- data/Rakefile +6 -0
- data/erlang-etf.gemspec +30 -0
- data/lib/erlang/etf.rb +40 -0
- data/lib/erlang/etf/atom.rb +46 -0
- data/lib/erlang/etf/atom_utf8.rb +44 -0
- data/lib/erlang/etf/bert.rb +74 -0
- data/lib/erlang/etf/binary.rb +44 -0
- data/lib/erlang/etf/bit_binary.rb +47 -0
- data/lib/erlang/etf/export.rb +44 -0
- data/lib/erlang/etf/extensions.rb +157 -0
- data/lib/erlang/etf/extensions/array.rb +29 -0
- data/lib/erlang/etf/extensions/big_decimal.rb +22 -0
- data/lib/erlang/etf/extensions/erlang-export.rb +26 -0
- data/lib/erlang/etf/extensions/erlang-list.rb +31 -0
- data/lib/erlang/etf/extensions/erlang-nil.rb +22 -0
- data/lib/erlang/etf/extensions/erlang-pid.rb +22 -0
- data/lib/erlang/etf/extensions/erlang-string.rb +22 -0
- data/lib/erlang/etf/extensions/erlang-tuple.rb +31 -0
- data/lib/erlang/etf/extensions/false_class.rb +28 -0
- data/lib/erlang/etf/extensions/float.rb +20 -0
- data/lib/erlang/etf/extensions/hash.rb +32 -0
- data/lib/erlang/etf/extensions/integer.rb +48 -0
- data/lib/erlang/etf/extensions/nil_class.rb +29 -0
- data/lib/erlang/etf/extensions/object.rb +24 -0
- data/lib/erlang/etf/extensions/regexp.rb +34 -0
- data/lib/erlang/etf/extensions/string.rb +35 -0
- data/lib/erlang/etf/extensions/symbol.rb +45 -0
- data/lib/erlang/etf/extensions/time.rb +29 -0
- data/lib/erlang/etf/extensions/true_class.rb +28 -0
- data/lib/erlang/etf/float.rb +57 -0
- data/lib/erlang/etf/fun.rb +67 -0
- data/lib/erlang/etf/integer.rb +29 -0
- data/lib/erlang/etf/large_big.rb +53 -0
- data/lib/erlang/etf/large_tuple.rb +55 -0
- data/lib/erlang/etf/list.rb +50 -0
- data/lib/erlang/etf/new_float.rb +33 -0
- data/lib/erlang/etf/new_fun.rb +98 -0
- data/lib/erlang/etf/new_reference.rb +59 -0
- data/lib/erlang/etf/nil.rb +23 -0
- data/lib/erlang/etf/pid.rb +45 -0
- data/lib/erlang/etf/port.rb +34 -0
- data/lib/erlang/etf/reference.rb +41 -0
- data/lib/erlang/etf/small_atom.rb +48 -0
- data/lib/erlang/etf/small_atom_utf8.rb +44 -0
- data/lib/erlang/etf/small_big.rb +59 -0
- data/lib/erlang/etf/small_integer.rb +29 -0
- data/lib/erlang/etf/small_tuple.rb +56 -0
- data/lib/erlang/etf/string.rb +46 -0
- data/lib/erlang/etf/term.rb +101 -0
- data/lib/erlang/etf/terms.rb +105 -0
- data/lib/erlang/etf/version.rb +5 -0
- data/spec/erlang/etf/atom_spec.rb +90 -0
- data/spec/erlang/etf/atom_utf8_spec.rb +90 -0
- data/spec/erlang/etf/binary_spec.rb +90 -0
- data/spec/erlang/etf/bit_binary_spec.rb +99 -0
- data/spec/erlang/etf/export_spec.rb +58 -0
- data/spec/erlang/etf/extensions/array_spec.rb +40 -0
- data/spec/erlang/etf/extensions/big_decimal_spec.rb +26 -0
- data/spec/erlang/etf/extensions/erlang-export_spec.rb +32 -0
- data/spec/erlang/etf/extensions/erlang-list_spec.rb +76 -0
- data/spec/erlang/etf/extensions/erlang-nil_spec.rb +24 -0
- data/spec/erlang/etf/extensions/erlang-pid_spec.rb +33 -0
- data/spec/erlang/etf/extensions/erlang-string_spec.rb +26 -0
- data/spec/erlang/etf/extensions/erlang-tuple_spec.rb +56 -0
- data/spec/erlang/etf/extensions/false_class_spec.rb +29 -0
- data/spec/erlang/etf/extensions/float_spec.rb +24 -0
- data/spec/erlang/etf/extensions/hash_spec.rb +90 -0
- data/spec/erlang/etf/extensions/integer_spec.rb +259 -0
- data/spec/erlang/etf/extensions/nil_class_spec.rb +29 -0
- data/spec/erlang/etf/extensions/object_spec.rb +30 -0
- data/spec/erlang/etf/extensions/regexp_spec.rb +35 -0
- data/spec/erlang/etf/extensions/string_spec.rb +43 -0
- data/spec/erlang/etf/extensions/symbol_spec.rb +64 -0
- data/spec/erlang/etf/extensions/time_spec.rb +32 -0
- data/spec/erlang/etf/extensions/true_class_spec.rb +29 -0
- data/spec/erlang/etf/float_spec.rb +92 -0
- data/spec/erlang/etf/fun_spec.rb +132 -0
- data/spec/erlang/etf/integer_spec.rb +57 -0
- data/spec/erlang/etf/large_big_spec.rb +67 -0
- data/spec/erlang/etf/large_tuple_spec.rb +119 -0
- data/spec/erlang/etf/list_spec.rb +159 -0
- data/spec/erlang/etf/new_float_spec.rb +92 -0
- data/spec/erlang/etf/new_fun_spec.rb +146 -0
- data/spec/erlang/etf/new_reference_spec.rb +60 -0
- data/spec/erlang/etf/nil_spec.rb +50 -0
- data/spec/erlang/etf/pid_spec.rb +61 -0
- data/spec/erlang/etf/port_spec.rb +58 -0
- data/spec/erlang/etf/reference_spec.rb +58 -0
- data/spec/erlang/etf/small_atom_spec.rb +90 -0
- data/spec/erlang/etf/small_atom_utf8_spec.rb +90 -0
- data/spec/erlang/etf/small_big_spec.rb +67 -0
- data/spec/erlang/etf/small_integer_spec.rb +57 -0
- data/spec/erlang/etf/small_tuple_spec.rb +112 -0
- data/spec/erlang/etf/string_spec.rb +92 -0
- data/spec/erlang/etf/term_spec.rb +27 -0
- data/spec/erlang/etf/terms_spec.rb +23 -0
- data/spec/erlang/etf_spec.rb +23 -0
- data/spec/erlang_spec.rb +77 -0
- data/spec/spec_helper.rb +7 -0
- metadata +310 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
module Erlang
|
2
|
+
module ETF
|
3
|
+
|
4
|
+
#
|
5
|
+
# 1 | 4
|
6
|
+
# -- | ---
|
7
|
+
# 98 | Int
|
8
|
+
#
|
9
|
+
# Signed 32 bit integer in big-endian format (i.e. MSB first)
|
10
|
+
#
|
11
|
+
class Integer
|
12
|
+
include Term
|
13
|
+
|
14
|
+
uint8 :tag, always: Terms::INTEGER_EXT
|
15
|
+
|
16
|
+
int32be :int
|
17
|
+
|
18
|
+
finalize
|
19
|
+
|
20
|
+
def initialize(int)
|
21
|
+
@int = int
|
22
|
+
end
|
23
|
+
|
24
|
+
def __ruby_evolve__
|
25
|
+
int
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Erlang
|
2
|
+
module ETF
|
3
|
+
|
4
|
+
#
|
5
|
+
# 1 | 4 | 1 | n
|
6
|
+
# --- | - | ---- | ---------------
|
7
|
+
# 111 | n | Sign | d(0) ... d(n-1)
|
8
|
+
#
|
9
|
+
# Same as SMALL_BIG_EXT with the difference that the length field
|
10
|
+
# is an unsigned 4 byte integer.
|
11
|
+
#
|
12
|
+
class LargeBig
|
13
|
+
include Term
|
14
|
+
|
15
|
+
uint8 :tag, always: Terms::LARGE_BIG_EXT
|
16
|
+
|
17
|
+
uint32be :n, default: 0 do
|
18
|
+
uint8 :sign, always: -> { (integer >= 0) ? 0 : 1 }
|
19
|
+
string :integer
|
20
|
+
end
|
21
|
+
|
22
|
+
undef serialize_integer
|
23
|
+
def serialize_integer(buffer)
|
24
|
+
start = buffer.bytesize
|
25
|
+
buffer << [integer.abs.to_s(2).reverse!].pack(BIN_LSB_PACK)
|
26
|
+
self.n = buffer.bytesize - start
|
27
|
+
buffer
|
28
|
+
end
|
29
|
+
|
30
|
+
undef after_serialize_n
|
31
|
+
def after_serialize_n(buffer)
|
32
|
+
buffer[@n_start, BYTES_32] = serialize_n ""
|
33
|
+
end
|
34
|
+
|
35
|
+
deserialize do |buffer|
|
36
|
+
deserialize_n(buffer)
|
37
|
+
sign, = buffer.read(BYTES_8).unpack(UINT8_PACK)
|
38
|
+
self.integer = buffer.read(n).unpack(BIN_LSB_PACK).at(0).reverse!.to_i(2) * ((sign == 0) ? 1 : -1)
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
finalize
|
43
|
+
|
44
|
+
def initialize(integer)
|
45
|
+
@integer = integer
|
46
|
+
end
|
47
|
+
|
48
|
+
def __ruby_evolve__
|
49
|
+
integer
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Erlang
|
2
|
+
module ETF
|
3
|
+
|
4
|
+
#
|
5
|
+
# 1 | 4 | N
|
6
|
+
# --- | ----- | --------
|
7
|
+
# 105 | Arity | Elements
|
8
|
+
#
|
9
|
+
# Same as SMALL_TUPLE_EXT with the exception that Arity is an
|
10
|
+
# unsigned 4 byte integer in big endian format.
|
11
|
+
#
|
12
|
+
class LargeTuple
|
13
|
+
include Term
|
14
|
+
|
15
|
+
uint8 :tag, always: Terms::LARGE_TUPLE_EXT
|
16
|
+
|
17
|
+
uint32be :arity, always: -> { elements.size }
|
18
|
+
|
19
|
+
term :elements, type: :array
|
20
|
+
|
21
|
+
deserialize do |buffer|
|
22
|
+
arity, = buffer.read(BYTES_32).unpack(UINT32BE_PACK)
|
23
|
+
self.elements = []
|
24
|
+
arity.times do
|
25
|
+
self.elements << Terms.deserialize(buffer)
|
26
|
+
end
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
finalize
|
31
|
+
|
32
|
+
def initialize(elements)
|
33
|
+
@elements = elements
|
34
|
+
end
|
35
|
+
|
36
|
+
def serialize_header(buffer)
|
37
|
+
serialize_tag(buffer)
|
38
|
+
serialize_arity(buffer)
|
39
|
+
end
|
40
|
+
|
41
|
+
def bert?
|
42
|
+
elements[0].respond_to?(:atom_name) &&
|
43
|
+
elements[0].atom_name == BERT_PREFIX
|
44
|
+
end
|
45
|
+
|
46
|
+
def __ruby_evolve__
|
47
|
+
if bert?
|
48
|
+
::Erlang::ETF::BERT.evolve(self)
|
49
|
+
else
|
50
|
+
::Erlang::Tuple[*elements.map(&:__ruby_evolve__)]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Erlang
|
2
|
+
module ETF
|
3
|
+
|
4
|
+
#
|
5
|
+
# 1 | 4 | Len |
|
6
|
+
# --- | --- | -------- | ----
|
7
|
+
# 108 | Len | Elements | Tail
|
8
|
+
#
|
9
|
+
# Length is the number of elements that follows in the Elements
|
10
|
+
# section. Tail is the final tail of the list; it is NIL_EXT for a
|
11
|
+
# proper list, but may be anything type if the list is improper
|
12
|
+
# (for instance [a|b]).
|
13
|
+
#
|
14
|
+
class List
|
15
|
+
include Term
|
16
|
+
|
17
|
+
uint8 :tag, always: Terms::LIST_EXT
|
18
|
+
|
19
|
+
uint32be :len, always: -> { elements.size }
|
20
|
+
|
21
|
+
term :elements, type: :array
|
22
|
+
term :tail
|
23
|
+
|
24
|
+
deserialize do |buffer|
|
25
|
+
len, = buffer.read(BYTES_32).unpack(UINT32BE_PACK)
|
26
|
+
self.elements = []
|
27
|
+
len.times do
|
28
|
+
self.elements << Terms.deserialize(buffer)
|
29
|
+
end
|
30
|
+
deserialize_tail(buffer)
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
finalize
|
35
|
+
|
36
|
+
def initialize(elements, tail = Nil.new)
|
37
|
+
@elements = elements
|
38
|
+
@tail = tail
|
39
|
+
end
|
40
|
+
|
41
|
+
def improper?
|
42
|
+
tail.class != ETF::Nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def __ruby_evolve__
|
46
|
+
::Erlang::List[*elements.map(&:__ruby_evolve__)].tail(tail.__ruby_evolve__)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'bigdecimal'
|
2
|
+
|
3
|
+
module Erlang
|
4
|
+
module ETF
|
5
|
+
|
6
|
+
#
|
7
|
+
# 1 | 8
|
8
|
+
# -- | ----------
|
9
|
+
# 70 | IEEE Float
|
10
|
+
#
|
11
|
+
# A float is stored as 8 bytes in big-endian IEEE format.
|
12
|
+
#
|
13
|
+
# This term is used in minor version 1 of the external format.
|
14
|
+
#
|
15
|
+
class NewFloat
|
16
|
+
include Term
|
17
|
+
|
18
|
+
uint8 :tag, always: Terms::NEW_FLOAT_EXT
|
19
|
+
|
20
|
+
doublebe :float
|
21
|
+
|
22
|
+
finalize
|
23
|
+
|
24
|
+
def initialize(float)
|
25
|
+
@float = float
|
26
|
+
end
|
27
|
+
|
28
|
+
def __ruby_evolve__
|
29
|
+
float
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Erlang
|
2
|
+
module ETF
|
3
|
+
|
4
|
+
#
|
5
|
+
# 1 | 4 | 1 | 16 | 4 | 4 | N1 | N2 | N3 | N4 | N5
|
6
|
+
# --- | ---- | ----- | ---- | ----- | ------- | ------ | -------- | ------- | --- | ---------
|
7
|
+
# 112 | Size | Arity | Uniq | Index | NumFree | Module | Oldindex | OldUniq | Pid | Free Vars
|
8
|
+
#
|
9
|
+
# This is the new encoding of internal funs:
|
10
|
+
# fun F/A and fun(Arg1,..) -> ... end.
|
11
|
+
#
|
12
|
+
# Size
|
13
|
+
# is the total number of bytes, including the Size field.
|
14
|
+
# Arity
|
15
|
+
# is the arity of the function implementing the fun.
|
16
|
+
# Uniq
|
17
|
+
# is the 16 bytes MD5 of the significant parts of the Beam file.
|
18
|
+
# Index
|
19
|
+
# is an index number. Each fun within a module has an unique
|
20
|
+
# index. Index is stored in big-endian byte order.
|
21
|
+
# NumFree
|
22
|
+
# is the number of free variables.
|
23
|
+
# Module
|
24
|
+
# is an encoded as an atom, using ATOM_EXT, SMALL_ATOM_EXT or
|
25
|
+
# ATOM_CACHE_REF. This is the module that the fun is implemented
|
26
|
+
# in.
|
27
|
+
# OldIndex
|
28
|
+
# is an integer encoded using SMALL_INTEGER_EXT or INTEGER_EXT.
|
29
|
+
# It is typically a small index into the module's fun table.
|
30
|
+
# OldUniq
|
31
|
+
# is an integer encoded using SMALL_INTEGER_EXT or INTEGER_EXT.
|
32
|
+
# Uniq is the hash value of the parse tree for the fun.
|
33
|
+
# Pid
|
34
|
+
# is a process identifier as in PID_EXT. It represents the
|
35
|
+
# process in which the fun was created.
|
36
|
+
# Free vars
|
37
|
+
# is NumFree number of terms, each one encoded according to its
|
38
|
+
# type.
|
39
|
+
#
|
40
|
+
class NewFun
|
41
|
+
include Term
|
42
|
+
|
43
|
+
uint8 :tag, always: Terms::NEW_FUN_EXT
|
44
|
+
|
45
|
+
uint32be :size, default: 0, inclusive: true do
|
46
|
+
uint8 :arity
|
47
|
+
string :uniq
|
48
|
+
uint32be :index
|
49
|
+
uint32be :num_free, always: -> { free_vars.size }
|
50
|
+
term :mod
|
51
|
+
term :old_index
|
52
|
+
term :old_uniq
|
53
|
+
term :pid
|
54
|
+
term :free_vars, type: :array
|
55
|
+
end
|
56
|
+
|
57
|
+
undef deserialize_uniq
|
58
|
+
def deserialize_uniq(buffer)
|
59
|
+
self.uniq = buffer.read(16).unpack(UINT8_PACK + '*')
|
60
|
+
end
|
61
|
+
|
62
|
+
undef serialize_uniq
|
63
|
+
def serialize_uniq(buffer)
|
64
|
+
buffer << uniq.pack(UINT8_PACK + '*')
|
65
|
+
end
|
66
|
+
|
67
|
+
deserialize do |buffer|
|
68
|
+
deserialize_size(buffer)
|
69
|
+
deserialize_arity(buffer)
|
70
|
+
deserialize_uniq(buffer)
|
71
|
+
deserialize_index(buffer)
|
72
|
+
num_free, = buffer.read(BYTES_32).unpack(UINT32BE_PACK)
|
73
|
+
deserialize_mod(buffer)
|
74
|
+
deserialize_old_index(buffer)
|
75
|
+
deserialize_old_uniq(buffer)
|
76
|
+
deserialize_pid(buffer)
|
77
|
+
self.free_vars = []
|
78
|
+
num_free.times do
|
79
|
+
self.free_vars << Terms.deserialize(buffer)
|
80
|
+
end
|
81
|
+
self
|
82
|
+
end
|
83
|
+
|
84
|
+
finalize
|
85
|
+
|
86
|
+
def initialize(arity, uniq, index, mod, old_index, old_uniq, pid, free_vars = [])
|
87
|
+
self.arity = arity
|
88
|
+
self.uniq = uniq
|
89
|
+
self.index = index
|
90
|
+
self.mod = mod
|
91
|
+
self.old_index = old_index
|
92
|
+
self.old_uniq = old_uniq
|
93
|
+
self.pid = pid
|
94
|
+
self.free_vars = free_vars
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Erlang
|
2
|
+
module ETF
|
3
|
+
|
4
|
+
#
|
5
|
+
# 1 | 2 | N | 1 | N'
|
6
|
+
# --- | --- | ---- | -------- | ------
|
7
|
+
# 114 | Len | Node | Creation | ID ...
|
8
|
+
#
|
9
|
+
# Node and Creation are as in REFERENCE_EXT.
|
10
|
+
#
|
11
|
+
# ID contains a sequence of big-endian unsigned integers (4 bytes
|
12
|
+
# each, so N' is a multiple of 4), but should be regarded as
|
13
|
+
# uninterpreted data.
|
14
|
+
#
|
15
|
+
# N' = 4 * Len.
|
16
|
+
#
|
17
|
+
# In the first word (four bytes) of ID, only 18 bits are
|
18
|
+
# significant, the rest should be 0. In Creation, only 2 bits are
|
19
|
+
# significant, the rest should be 0.
|
20
|
+
#
|
21
|
+
# NEW_REFERENCE_EXT was introduced with distribution version 4. In
|
22
|
+
# version 4, N' should be at most 12.
|
23
|
+
#
|
24
|
+
# See REFERENCE_EXT).
|
25
|
+
#
|
26
|
+
class NewReference
|
27
|
+
include Term
|
28
|
+
|
29
|
+
uint8 :tag, always: Terms::NEW_REFERENCE_EXT
|
30
|
+
|
31
|
+
uint16be :len, always: -> { ids.size }
|
32
|
+
|
33
|
+
term :node
|
34
|
+
|
35
|
+
int8 :creation, maximum: (1 << 2) - 1
|
36
|
+
|
37
|
+
uint32be :ids, type: :array, default: []
|
38
|
+
|
39
|
+
deserialize do |buffer|
|
40
|
+
len, = buffer.read(BYTES_16).unpack(UINT16BE_PACK)
|
41
|
+
deserialize_node(buffer)
|
42
|
+
deserialize_creation(buffer)
|
43
|
+
self.ids = []
|
44
|
+
len.times do
|
45
|
+
self.ids << buffer.read(BYTES_32).unpack(UINT32BE_PACK).at(0)
|
46
|
+
end
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
finalize
|
51
|
+
|
52
|
+
def initialize(node, creation, ids = [])
|
53
|
+
@node = node
|
54
|
+
@creation = creation
|
55
|
+
@ids = ids
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Erlang
|
2
|
+
module ETF
|
3
|
+
|
4
|
+
#
|
5
|
+
# 1
|
6
|
+
# ---
|
7
|
+
# 106
|
8
|
+
#
|
9
|
+
# The representation for an empty list, i.e. the Erlang syntax [].
|
10
|
+
#
|
11
|
+
class Nil
|
12
|
+
include Term
|
13
|
+
|
14
|
+
uint8 :tag, always: Terms::NIL_EXT
|
15
|
+
|
16
|
+
finalize
|
17
|
+
|
18
|
+
def __ruby_evolve__
|
19
|
+
[]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Erlang
|
2
|
+
module ETF
|
3
|
+
|
4
|
+
#
|
5
|
+
# 1 | N | 4 | 4 | 1
|
6
|
+
# --- | ---- | -- | ------ | --------
|
7
|
+
# 103 | Node | ID | Serial | Creation
|
8
|
+
#
|
9
|
+
# Encode a process identifier object (obtained from spawn/3 or
|
10
|
+
# friends). The ID and Creation fields works just like in
|
11
|
+
# REFERENCE_EXT, while the Serial field is used to improve safety.
|
12
|
+
# In ID, only 15 bits are significant; the rest should be 0.
|
13
|
+
#
|
14
|
+
class Pid
|
15
|
+
include Term
|
16
|
+
|
17
|
+
uint8 :tag, always: Terms::PID_EXT
|
18
|
+
|
19
|
+
term :node
|
20
|
+
|
21
|
+
uint32be :id, maximum: (1 << 15) - 1
|
22
|
+
uint32be :serial, maximum: (1 << 13) - 1
|
23
|
+
|
24
|
+
int8 :creation, maximum: (1 << 2) - 1
|
25
|
+
|
26
|
+
finalize
|
27
|
+
|
28
|
+
def initialize(node, id, serial, creation)
|
29
|
+
@node = node
|
30
|
+
@id = id
|
31
|
+
@serial = serial
|
32
|
+
@creation = creation
|
33
|
+
end
|
34
|
+
|
35
|
+
def __ruby_evolve__
|
36
|
+
::Erlang::Pid.new(
|
37
|
+
node.__ruby_evolve__,
|
38
|
+
id,
|
39
|
+
serial,
|
40
|
+
creation
|
41
|
+
)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|