msgpack 1.4.5-java → 1.5.0-java
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 +4 -4
- data/lib/msgpack/bigint.rb +69 -0
- data/lib/msgpack/factory.rb +103 -0
- data/lib/msgpack/msgpack.jar +0 -0
- data/lib/msgpack/version.rb +1 -1
- data/lib/msgpack.rb +4 -5
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cd45a3258926838cc8e1415fc6497a270254ff174374feffc5a9e1a510625631
|
|
4
|
+
data.tar.gz: fcf99b743ccd3fe66d1b7a4c85835bb1a446bf8dca3843fb2ab44247b927fc7c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 98c184279302d4f36cc8dfab35af8f335c6af3e1235c5e9ccffbd311c9c9d9afb7f1b4404e28c32af7bd9ad2b69528ab38d1b58c5aa6856bc354b8841a7aada8
|
|
7
|
+
data.tar.gz: 5f3778e39e59313e83939d61c58f944084991e25ad7ce15e32c5551927fdf6ec2456c2cd50a3626243b65b33b6411567d3ebb2e54a97e3a7bbcd56bdf1358242
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MessagePack
|
|
4
|
+
module Bigint
|
|
5
|
+
# We split the bigint in 32bits chunks so that individual part fits into
|
|
6
|
+
# a MRI immediate Integer.
|
|
7
|
+
CHUNK_BITLENGTH = 32
|
|
8
|
+
FORMAT = 'CL>*'
|
|
9
|
+
|
|
10
|
+
if Integer.instance_method(:[]).arity != 1 # Ruby 2.7 and newer
|
|
11
|
+
# Starting from Ruby 2.7 we can address arbitrary bitranges inside an Integer with Integer#[]
|
|
12
|
+
# This allows to not allocate any Integer.
|
|
13
|
+
def self.to_msgpack_ext(bigint)
|
|
14
|
+
members = []
|
|
15
|
+
|
|
16
|
+
if bigint < 0
|
|
17
|
+
bigint = -bigint
|
|
18
|
+
members << 1
|
|
19
|
+
else
|
|
20
|
+
members << 0
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
offset = 0
|
|
24
|
+
length = bigint.bit_length
|
|
25
|
+
while offset < length
|
|
26
|
+
members << bigint[offset, CHUNK_BITLENGTH]
|
|
27
|
+
offset += CHUNK_BITLENGTH
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
members.pack(FORMAT)
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
# On 2.6 and older since we can't address arbitrary bitranges, so we fallback to shifting the bigint.
|
|
34
|
+
# This means that after each shift, we may allocate another Integer instance.
|
|
35
|
+
BASE = (2**CHUNK_BITLENGTH) - 1
|
|
36
|
+
def self.to_msgpack_ext(bigint)
|
|
37
|
+
members = []
|
|
38
|
+
|
|
39
|
+
if bigint < 0
|
|
40
|
+
bigint = -bigint
|
|
41
|
+
members << 1
|
|
42
|
+
else
|
|
43
|
+
members << 0
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
while bigint > 0
|
|
47
|
+
members << (bigint & BASE)
|
|
48
|
+
bigint = bigint >> CHUNK_BITLENGTH
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
members.pack(FORMAT)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.from_msgpack_ext(data)
|
|
56
|
+
parts = data.unpack(FORMAT)
|
|
57
|
+
|
|
58
|
+
sign = parts.shift
|
|
59
|
+
sum = parts.pop.to_i
|
|
60
|
+
|
|
61
|
+
parts.reverse_each do |part|
|
|
62
|
+
sum = sum << CHUNK_BITLENGTH
|
|
63
|
+
sum += part
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
sign == 0 ? sum : -sum
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
data/lib/msgpack/factory.rb
CHANGED
|
@@ -77,5 +77,108 @@ module MessagePack
|
|
|
77
77
|
packer.full_pack
|
|
78
78
|
end
|
|
79
79
|
alias :pack :dump
|
|
80
|
+
|
|
81
|
+
def pool(size = 1, **options)
|
|
82
|
+
Pool.new(
|
|
83
|
+
frozen? ? self : dup.freeze,
|
|
84
|
+
size,
|
|
85
|
+
options.empty? ? nil : options,
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
class Pool
|
|
90
|
+
if RUBY_ENGINE == "ruby"
|
|
91
|
+
class AbstractPool
|
|
92
|
+
def initialize(size, &block)
|
|
93
|
+
@size = size
|
|
94
|
+
@new_member = block
|
|
95
|
+
@members = []
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def checkout
|
|
99
|
+
@members.pop || @new_member.call
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def checkin(member)
|
|
103
|
+
# If the pool is already full, we simply drop the extra member.
|
|
104
|
+
# This is because contrary to a connection pool, creating an extra instance
|
|
105
|
+
# is extremely unlikely to cause some kind of resource exhaustion.
|
|
106
|
+
#
|
|
107
|
+
# We could cycle the members (keep the newer one) but first It's more work and second
|
|
108
|
+
# the older member might have been created pre-fork, so it might be at least partially
|
|
109
|
+
# in shared memory.
|
|
110
|
+
if member && @members.size < @size
|
|
111
|
+
member.reset
|
|
112
|
+
@members << member
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
else
|
|
117
|
+
class AbstractPool
|
|
118
|
+
def initialize(size, &block)
|
|
119
|
+
@size = size
|
|
120
|
+
@new_member = block
|
|
121
|
+
@members = []
|
|
122
|
+
@mutex = Mutex.new
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def checkout
|
|
126
|
+
@mutex.synchronize { @members.pop } || @new_member.call
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def checkin(member)
|
|
130
|
+
@mutex.synchronize do
|
|
131
|
+
if member && @members.size < @size
|
|
132
|
+
member.reset
|
|
133
|
+
@members << member
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
class PackerPool < AbstractPool
|
|
141
|
+
private
|
|
142
|
+
|
|
143
|
+
def reset(packer)
|
|
144
|
+
packer.clear
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
class UnpackerPool < AbstractPool
|
|
149
|
+
private
|
|
150
|
+
|
|
151
|
+
def reset(unpacker)
|
|
152
|
+
unpacker.reset
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def initialize(factory, size, options = nil)
|
|
157
|
+
options = nil if !options || options.empty?
|
|
158
|
+
@factory = factory
|
|
159
|
+
@packers = PackerPool.new(size) { factory.packer(options) }
|
|
160
|
+
@unpackers = UnpackerPool.new(size) { factory.unpacker(options) }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def load(data)
|
|
164
|
+
unpacker = @unpackers.checkout
|
|
165
|
+
begin
|
|
166
|
+
unpacker.feed_reference(data)
|
|
167
|
+
unpacker.full_unpack
|
|
168
|
+
ensure
|
|
169
|
+
@unpackers.checkin(unpacker)
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def dump(object)
|
|
174
|
+
packer = @packers.checkout
|
|
175
|
+
begin
|
|
176
|
+
packer.write(object)
|
|
177
|
+
packer.full_pack
|
|
178
|
+
ensure
|
|
179
|
+
@packers.checkin(packer)
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
80
183
|
end
|
|
81
184
|
end
|
data/lib/msgpack/msgpack.jar
CHANGED
|
Binary file
|
data/lib/msgpack/version.rb
CHANGED
data/lib/msgpack.rb
CHANGED
|
@@ -17,16 +17,15 @@ require "msgpack/time"
|
|
|
17
17
|
|
|
18
18
|
module MessagePack
|
|
19
19
|
DefaultFactory = MessagePack::Factory.new
|
|
20
|
-
DEFAULT_EMPTY_PARAMS = {}.freeze
|
|
21
20
|
|
|
22
21
|
def load(src, param = nil)
|
|
23
22
|
unpacker = nil
|
|
24
23
|
|
|
25
24
|
if src.is_a? String
|
|
26
|
-
unpacker = DefaultFactory.unpacker param
|
|
25
|
+
unpacker = DefaultFactory.unpacker param
|
|
27
26
|
unpacker.feed_reference src
|
|
28
27
|
else
|
|
29
|
-
unpacker = DefaultFactory.unpacker src, param
|
|
28
|
+
unpacker = DefaultFactory.unpacker src, param
|
|
30
29
|
end
|
|
31
30
|
|
|
32
31
|
unpacker.full_unpack
|
|
@@ -36,8 +35,8 @@ module MessagePack
|
|
|
36
35
|
module_function :load
|
|
37
36
|
module_function :unpack
|
|
38
37
|
|
|
39
|
-
def pack(v,
|
|
40
|
-
packer = DefaultFactory.packer(
|
|
38
|
+
def pack(v, io = nil, options = nil)
|
|
39
|
+
packer = DefaultFactory.packer(io, options)
|
|
41
40
|
packer.write v
|
|
42
41
|
packer.full_pack
|
|
43
42
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: msgpack
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.5.0
|
|
5
5
|
platform: java
|
|
6
6
|
authors:
|
|
7
7
|
- Sadayuki Furuhashi
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2022-
|
|
13
|
+
date: 2022-04-06 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -108,6 +108,7 @@ extensions: []
|
|
|
108
108
|
extra_rdoc_files: []
|
|
109
109
|
files:
|
|
110
110
|
- lib/msgpack.rb
|
|
111
|
+
- lib/msgpack/bigint.rb
|
|
111
112
|
- lib/msgpack/core_ext.rb
|
|
112
113
|
- lib/msgpack/factory.rb
|
|
113
114
|
- lib/msgpack/msgpack.jar
|