| line |
true |
false |
branch |
|
7
|
2 |
15 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
|
0 |
17 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
|
0 |
17 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
9
|
0 |
17 |
if (!map) croak("Failed to create HashMap::SI32"); |
|
17
|
17 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
17 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
17 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
17 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
24
|
80223 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
80223 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
80223 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
80223 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
25
|
0 |
80223 |
EXTRACT_STR_KEY(key_sv); |
|
33
|
50010 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
50010 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
50010 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
50010 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
34
|
0 |
50010 |
EXTRACT_STR_KEY(key_sv); |
|
36
|
3 |
50007 |
if (!hashmap_si32_get(self, _kstr, (uint32_t)_klen, _khash, _kutf8, &value)) |
|
45
|
80005 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
80005 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
80005 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
80005 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
46
|
0 |
80005 |
EXTRACT_STR_KEY(key_sv); |
|
54
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
55
|
0 |
1 |
EXTRACT_STR_KEY(key_sv); |
|
57
|
0 |
1 |
if (!hashmap_si32_take(self, _kstr, (uint32_t)_klen, _khash, _kutf8, &value)) XSRETURN_UNDEF; |
|
65
|
2 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
2 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
66
|
0 |
2 |
EXTRACT_STR_KEY(key_sv); |
|
74
|
12 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
12 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
12 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
12 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
75
|
0 |
12 |
EXTRACT_STR_KEY(key_sv); |
|
77
|
1 |
11 |
if (!hashmap_si32_increment(self, _kstr, (uint32_t)_klen, _khash, _kutf8, &val)) |
|
86
|
3 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
3 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
87
|
0 |
3 |
EXTRACT_STR_KEY(key_sv); |
|
89
|
1 |
2 |
if (!hashmap_si32_decrement(self, _kstr, (uint32_t)_klen, _khash, _kutf8, &val)) |
|
98
|
6 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
6 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
6 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
6 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
99
|
0 |
6 |
EXTRACT_STR_KEY(key_sv); |
|
101
|
2 |
4 |
if (!hashmap_si32_increment_by(self, _kstr, (uint32_t)_klen, _khash, _kutf8, delta, &val)) |
|
110
|
5 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
5 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
5 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
5 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
111
|
0 |
5 |
RETVAL = self->size; |
|
118
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
119
|
0 |
0 |
RETVAL = self->max_size; |
|
126
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
127
|
0 |
0 |
RETVAL = (UV)self->default_ttl; |
|
134
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
135
|
0 |
0 |
RETVAL = (UV)self->lru_skip; |
|
142
|
3 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
3 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
143
|
0 |
3 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
144
|
0 |
3 |
EXTEND(SP, self->size); |
|
146
|
48 |
3 |
for (i = 0; i < self->capacity; i++) { |
|
147
|
8 |
40 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
7 |
1 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
7 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
150
|
1 |
6 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(sv); |
|
151
|
0 |
7 |
mXPUSHs(sv); |
|
158
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
159
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
160
|
0 |
1 |
EXTEND(SP, self->size); |
|
162
|
16 |
1 |
for (i = 0; i < self->capacity; i++) { |
|
163
|
2 |
14 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
|
2 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
|
0 |
2 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
164
|
0 |
2 |
mXPUSHi(self->nodes[i].value); |
|
170
|
2 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
2 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
171
|
0 |
2 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
172
|
0 |
2 |
EXTEND(SP, self->size * 2); |
|
174
|
32 |
2 |
for (i = 0; i < self->capacity; i++) { |
|
175
|
8 |
24 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
7 |
1 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
7 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
178
|
1 |
6 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(sv); |
|
179
|
0 |
7 |
mXPUSHs(sv); |
|
180
|
0 |
7 |
mXPUSHi(self->nodes[i].value); |
|
187
|
3 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
3 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
188
|
0 |
3 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
189
|
16 |
1 |
while (self->iter_pos < self->capacity) { |
|
191
|
2 |
14 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
2 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
2 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
192
|
0 |
2 |
EXTEND(SP, 2); |
|
196
|
0 |
2 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
197
|
0 |
2 |
mXPUSHs(ksv); |
|
199
|
0 |
2 |
if (GIMME_V == G_SCALAR) XSRETURN(1); |
|
200
|
0 |
2 |
mXPUSHi(self->nodes[i].value); |
|
210
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
216
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
217
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
219
|
0 |
1 |
EXTEND(SP, (count < self->size ? count : self->size) * 2); |
|
220
|
2 |
0 |
while (self->iter_pos < self->capacity && n < count) { |
|
|
1 |
1 |
while (self->iter_pos < self->capacity && n < count) { |
|
222
|
1 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
1 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
1 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
225
|
0 |
1 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
226
|
0 |
1 |
mXPUSHs(ksv); |
|
228
|
0 |
1 |
mXPUSHi(self->nodes[i].value); |
|
229
|
0 |
1 |
if (HM_UNLIKELY(self->lru_prev)) hashmap_si32_lru_unlink(self, (uint32_t)i); |
|
234
|
0 |
1 |
if (self->iter_pos >= self->capacity) self->iter_pos = 0; |
|
235
|
1 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
236
|
1 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
1 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
242
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
243
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
244
|
1 |
0 |
if (self->lru_prev) { |
|
245
|
1 |
0 |
while (self->lru_tail != HM_LRU_NONE) { |
|
247
|
0 |
1 |
if (HM_UNLIKELY(self->expires_at && self->expires_at[idx]) && now >= self->expires_at[idx]) { |
|
|
0 |
0 |
if (HM_UNLIKELY(self->expires_at && self->expires_at[idx]) && now >= self->expires_at[idx]) { |
|
|
0 |
0 |
if (HM_UNLIKELY(self->expires_at && self->expires_at[idx]) && now >= self->expires_at[idx]) { |
|
250
|
0 |
1 |
EXTEND(SP, 2); |
|
253
|
1 |
0 |
if (HM_UNPACK_UTF8(self->nodes[idx].key_len)) SvUTF8_on(ksv); |
|
254
|
0 |
1 |
mXPUSHs(ksv); |
|
256
|
0 |
1 |
mXPUSHi(self->nodes[idx].value); |
|
259
|
1 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
260
|
0 |
1 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
266
|
0 |
0 |
while (self->iter_pos < self->capacity) { |
|
268
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
269
|
0 |
0 |
EXTEND(SP, 2); |
|
272
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
273
|
0 |
0 |
mXPUSHs(ksv); |
|
275
|
0 |
0 |
mXPUSHi(self->nodes[i].value); |
|
277
|
0 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
278
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
290
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
291
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
292
|
0 |
0 |
if (self->lru_prev) { |
|
293
|
0 |
0 |
while (self->lru_head != HM_LRU_NONE) { |
|
295
|
0 |
0 |
if (HM_UNLIKELY(self->expires_at && self->expires_at[idx]) && now >= self->expires_at[idx]) { |
|
|
0 |
0 |
if (HM_UNLIKELY(self->expires_at && self->expires_at[idx]) && now >= self->expires_at[idx]) { |
|
|
0 |
0 |
if (HM_UNLIKELY(self->expires_at && self->expires_at[idx]) && now >= self->expires_at[idx]) { |
|
298
|
0 |
0 |
EXTEND(SP, 2); |
|
301
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[idx].key_len)) SvUTF8_on(ksv); |
|
302
|
0 |
0 |
mXPUSHs(ksv); |
|
304
|
0 |
0 |
mXPUSHi(self->nodes[idx].value); |
|
307
|
0 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
308
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
314
|
0 |
0 |
if (self->iter_pos == 0) self->iter_pos = self->capacity; |
|
315
|
0 |
0 |
while (self->iter_pos > 0) { |
|
317
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
318
|
0 |
0 |
EXTEND(SP, 2); |
|
321
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
322
|
0 |
0 |
mXPUSHs(ksv); |
|
324
|
0 |
0 |
mXPUSHi(self->nodes[i].value); |
|
326
|
0 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
327
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
339
|
2 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
2 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
345
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
346
|
0 |
0 |
if (!hashmap_si32_reserve(self, (size_t)count)) |
|
352
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
358
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
359
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
374
|
0 |
0 |
for (i = 0; i < self->capacity; i++) { |
|
375
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
384
|
0 |
0 |
if (self->expires_at && self->expires_at[i] && self->expires_at[i] > now) |
|
|
0 |
0 |
if (self->expires_at && self->expires_at[i] && self->expires_at[i] > now) |
|
|
0 |
0 |
if (self->expires_at && self->expires_at[i] && self->expires_at[i] > now) |
|
404
|
0 |
0 |
if (dlen < 22 || memcmp(p, "DHMP", 4) != 0) croak("Invalid freeze data"); |
|
|
0 |
0 |
if (dlen < 22 || memcmp(p, "DHMP", 4) != 0) croak("Invalid freeze data"); |
|
406
|
0 |
0 |
uint8_t ver = *p++; if (ver != 1) croak("Unsupported freeze version %d", ver); |
|
407
|
0 |
0 |
uint8_t vid = *p++; if (vid != 6) croak("Variant mismatch: expected 6, got %d", vid); |
|
413
|
0 |
0 |
if (!map) croak("Failed to create map for thaw"); |
|
414
|
0 |
0 |
if (cnt > 0) hashmap_si32_reserve(map, (size_t)cnt); |
|
416
|
0 |
0 |
for (j = 0; j < cnt; j++) { |
|
417
|
0 |
0 |
if (p + 13 > end) { hashmap_si32_destroy(map); croak("Truncated freeze data"); } |
|
420
|
0 |
0 |
if (p + kl + 8 > end) { hashmap_si32_destroy(map); croak("Truncated freeze data"); } |
|
428
|
0 |
0 |
if (p > end) croak("Truncated freeze data"); |
|
437
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
438
|
0 |
0 |
RETVAL = (UV)self->capacity; |
|
445
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
446
|
0 |
0 |
EXTRACT_STR_KEY(key_sv); |
|
454
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
455
|
0 |
0 |
EXTRACT_STR_KEY(key_sv); |
|
457
|
0 |
0 |
if (!hashmap_si32_swap(self, _kstr, (uint32_t)_klen, _khash, _kutf8, new_val, &old)) XSRETURN_UNDEF; |
|
465
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
466
|
0 |
0 |
EXTRACT_STR_KEY(key_sv); |
|
475
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
477
|
0 |
0 |
if (!clone) croak("Failed to clone"); |
|
478
|
0 |
0 |
RETVAL = sv_setref_pv(newSV(0), HvNAME(SvSTASH(SvRV(self_sv))), (void*)clone); |
|
|
0 |
0 |
RETVAL = sv_setref_pv(newSV(0), HvNAME(SvSTASH(SvRV(self_sv))), (void*)clone); |
|
|
0 |
0 |
RETVAL = sv_setref_pv(newSV(0), HvNAME(SvSTASH(SvRV(self_sv))), (void*)clone); |
|
|
0 |
0 |
RETVAL = sv_setref_pv(newSV(0), HvNAME(SvSTASH(SvRV(self_sv))), (void*)clone); |
|
|
0 |
0 |
RETVAL = sv_setref_pv(newSV(0), HvNAME(SvSTASH(SvRV(self_sv))), (void*)clone); |
|
|
0 |
0 |
RETVAL = sv_setref_pv(newSV(0), HvNAME(SvSTASH(SvRV(self_sv))), (void*)clone); |
|
485
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
486
|
0 |
0 |
if (!SvROK(href) || SvTYPE(SvRV(href)) != SVt_PVHV) |
|
|
0 |
0 |
if (!SvROK(href) || SvTYPE(SvRV(href)) != SVt_PVHV) |
|
489
|
0 |
0 |
hashmap_si32_reserve(self, (size_t)HvUSEDKEYS(hv)); |
|
492
|
0 |
0 |
while ((he = hv_iternext(hv))) { |
|
493
|
0 |
0 |
STRLEN klen; const char* kstr = HePV(he, klen); |
|
494
|
0 |
0 |
bool kutf8 = HeUTF8(he) ? true : false; |
|
503
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
504
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_si32) |
|
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_si32) |
|
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_si32) |
|
508
|
0 |
0 |
uint32_t now = other->expires_at ? (uint32_t)time(NULL) : 0; |
|
510
|
0 |
0 |
for (i = 0; i < other->capacity; i++) { |
|
511
|
0 |
0 |
if (SI32_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
|
0 |
0 |
if (SI32_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
|
0 |
0 |
if (SI32_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
|
0 |
0 |
if (SI32_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
|
0 |
0 |
if (SI32_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
519
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
521
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
523
|
16 |
1 |
for (i = 0; i < self->capacity; i++) { |
|
524
|
1 |
15 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
1 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
1 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SI32_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
528
|
0 |
1 |
(void)hv_store(hv, self->nodes[i].key, kutf8 ? -(I32)klen : (I32)klen, val, 0); |
|
538
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
539
|
0 |
1 |
EXTRACT_STR_KEY(key_sv); |
|
547
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSI32, stash_si32, "Data::HashMap::SI32", self_sv); |
|
548
|
0 |
1 |
EXTRACT_STR_KEY(key_sv); |
|
552
|
0 |
1 |
if (idx >= self->capacity) XSRETURN_UNDEF; |