Method: MessagePack::Bigint.to_msgpack_ext
- Defined in:
-
lib/msgpack/bigint.rb,
lib/msgpack/bigint.rb
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 |