Method: MessagePack::Bigint.to_msgpack_ext

Defined in:
lib/msgpack/bigint.rb,
lib/msgpack/bigint.rb

.to_msgpack_ext(bigint) ⇒ Object

Starting from Ruby 2.7 we can address arbitrary bitranges inside an Integer with Integer#[] This allows to not allocate any Integer.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/msgpack/bigint.rb', line 13

def self.to_msgpack_ext(bigint)
  members = []

  if bigint < 0
    bigint = -bigint
    members << 1
  else
    members << 0
  end

  offset = 0
  length = bigint.bit_length
  while offset < length
    members << bigint[offset, CHUNK_BITLENGTH]
    offset += CHUNK_BITLENGTH
  end

  members.pack(FORMAT)
end