| line |
true |
false |
branch |
|
7
|
3 |
12 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
|
0 |
15 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
|
0 |
15 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
9
|
0 |
15 |
if (!map) croak("Failed to create HashMap::I16S"); |
|
17
|
15 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
15 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
15 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
15 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
24
|
60316 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
60316 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
60316 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
60316 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
25
|
0 |
60316 |
EXTRACT_STR_VAL(value); |
|
33
|
30009 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
30009 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
30009 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
30009 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
37
|
3 |
30006 |
if (!hashmap_i16s_get(self, key, &val, &val_len, &val_utf8)) |
|
40
|
1 |
30005 |
if (val_utf8) SvUTF8_on(RETVAL); |
|
47
|
2 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
2 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
51
|
1 |
1 |
if (!hashmap_i16s_get(self, key, &val, &val_len, &val_utf8)) |
|
60
|
60006 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
60006 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
60006 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
60006 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
68
|
1 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
70
|
0 |
1 |
if (!hashmap_i16s_take(self, key, &val, &val_len, &val_utf8)) XSRETURN_UNDEF; |
|
72
|
0 |
1 |
if (val_utf8) SvUTF8_on(RETVAL); |
|
80
|
4 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
4 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
4 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
4 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
88
|
8 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
8 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
8 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
8 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
89
|
0 |
8 |
RETVAL = self->size; |
|
96
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
97
|
0 |
0 |
RETVAL = self->max_size; |
|
104
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
105
|
0 |
0 |
RETVAL = (UV)self->default_ttl; |
|
112
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
113
|
0 |
0 |
RETVAL = (UV)self->lru_skip; |
|
120
|
2 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
2 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
2 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
121
|
0 |
2 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
122
|
0 |
2 |
EXTEND(SP, self->size); |
|
124
|
32 |
2 |
for (i = 0; i < self->capacity; i++) { |
|
125
|
2 |
30 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
|
2 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
|
0 |
2 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) |
|
126
|
0 |
2 |
mXPUSHi(self->nodes[i].key); |
|
132
|
1 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
133
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
134
|
0 |
1 |
EXTEND(SP, self->size); |
|
136
|
16 |
1 |
for (i = 0; i < self->capacity; i++) { |
|
137
|
2 |
14 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
2 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
2 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
138
|
2 |
0 |
if (self->nodes[i].value) { |
|
141
|
0 |
2 |
if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(sv); |
|
142
|
0 |
2 |
mXPUSHs(sv); |
|
144
|
0 |
0 |
XPUSHs(&PL_sv_undef); |
|
152
|
1 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
153
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
154
|
0 |
1 |
EXTEND(SP, self->size * 2); |
|
156
|
16 |
1 |
for (i = 0; i < self->capacity; i++) { |
|
157
|
2 |
14 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
2 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
2 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
158
|
0 |
2 |
mXPUSHi(self->nodes[i].key); |
|
159
|
2 |
0 |
if (self->nodes[i].value) { |
|
162
|
0 |
2 |
if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(sv); |
|
163
|
0 |
2 |
mXPUSHs(sv); |
|
165
|
0 |
0 |
XPUSHs(&PL_sv_undef); |
|
173
|
3 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
3 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
174
|
0 |
3 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
175
|
16 |
1 |
while (self->iter_pos < self->capacity) { |
|
177
|
2 |
14 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
2 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
2 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
178
|
0 |
2 |
EXTEND(SP, 2); |
|
179
|
0 |
2 |
mXPUSHi(self->nodes[i].key); |
|
180
|
0 |
2 |
if (GIMME_V == G_SCALAR) XSRETURN(1); |
|
181
|
2 |
0 |
if (self->nodes[i].value) { |
|
184
|
0 |
2 |
if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(vsv); |
|
185
|
0 |
2 |
mXPUSHs(vsv); |
|
187
|
0 |
0 |
XPUSHs(&PL_sv_undef); |
|
198
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
204
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
205
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
207
|
0 |
0 |
EXTEND(SP, (count < self->size ? count : self->size) * 2); |
|
208
|
0 |
0 |
while (self->iter_pos < self->capacity && n < count) { |
|
|
0 |
0 |
while (self->iter_pos < self->capacity && n < count) { |
|
210
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
211
|
0 |
0 |
mXPUSHi(self->nodes[i].key); |
|
212
|
0 |
0 |
if (self->nodes[i].value) { |
|
214
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(sv); |
|
215
|
0 |
0 |
mXPUSHs(sv); |
|
216
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
219
|
0 |
0 |
if (HM_UNLIKELY(self->lru_prev)) hashmap_i16s_lru_unlink(self, (uint32_t)i); |
|
224
|
0 |
0 |
if (self->iter_pos >= self->capacity) self->iter_pos = 0; |
|
225
|
0 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
226
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
232
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
233
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
234
|
0 |
0 |
if (self->lru_prev) { |
|
235
|
0 |
0 |
while (self->lru_tail != HM_LRU_NONE) { |
|
237
|
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]) { |
|
240
|
0 |
0 |
EXTEND(SP, 2); |
|
241
|
0 |
0 |
mXPUSHi(self->nodes[idx].key); |
|
242
|
0 |
0 |
if (self->nodes[idx].value) { |
|
244
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[idx].val_len)) SvUTF8_on(sv); |
|
245
|
0 |
0 |
mXPUSHs(sv); |
|
246
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
251
|
0 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
252
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
258
|
0 |
0 |
while (self->iter_pos < self->capacity) { |
|
260
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
261
|
0 |
0 |
EXTEND(SP, 2); |
|
262
|
0 |
0 |
mXPUSHi(self->nodes[i].key); |
|
263
|
0 |
0 |
if (self->nodes[i].value) { |
|
265
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(sv); |
|
266
|
0 |
0 |
mXPUSHs(sv); |
|
267
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
271
|
0 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
272
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
284
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
285
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
286
|
0 |
0 |
if (self->lru_prev) { |
|
287
|
0 |
0 |
while (self->lru_head != HM_LRU_NONE) { |
|
289
|
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]) { |
|
292
|
0 |
0 |
EXTEND(SP, 2); |
|
293
|
0 |
0 |
mXPUSHi(self->nodes[idx].key); |
|
294
|
0 |
0 |
if (self->nodes[idx].value) { |
|
296
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[idx].val_len)) SvUTF8_on(sv); |
|
297
|
0 |
0 |
mXPUSHs(sv); |
|
298
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
303
|
0 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
304
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
310
|
0 |
0 |
if (self->iter_pos == 0) self->iter_pos = self->capacity; |
|
311
|
0 |
0 |
while (self->iter_pos > 0) { |
|
313
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
314
|
0 |
0 |
EXTEND(SP, 2); |
|
315
|
0 |
0 |
mXPUSHi(self->nodes[i].key); |
|
316
|
0 |
0 |
if (self->nodes[i].value) { |
|
318
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(sv); |
|
319
|
0 |
0 |
mXPUSHs(sv); |
|
320
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
324
|
0 |
0 |
if (self->tombstones > self->capacity / 4 || |
|
325
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
|
0 |
0 |
(self->size > 0 && self->tombstones > self->size)) |
|
337
|
3 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
3 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
343
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
344
|
0 |
0 |
if (!hashmap_i16s_reserve(self, (size_t)count)) |
|
350
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
356
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
357
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
372
|
0 |
0 |
for (i = 0; i < self->capacity; i++) { |
|
373
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
379
|
0 |
0 |
if (self->nodes[i].value) sv_catpvn(buf, self->nodes[i].value, vl); |
|
382
|
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) |
|
402
|
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"); |
|
404
|
0 |
0 |
uint8_t ver = *p++; if (ver != 1) croak("Unsupported freeze version %d", ver); |
|
405
|
0 |
0 |
uint8_t vid = *p++; if (vid != 8) croak("Variant mismatch: expected 8, got %d", vid); |
|
411
|
0 |
0 |
if (!map) croak("Failed to create map for thaw"); |
|
412
|
0 |
0 |
if (cnt > 0) hashmap_i16s_reserve(map, (size_t)cnt); |
|
414
|
0 |
0 |
for (j = 0; j < cnt; j++) { |
|
415
|
0 |
0 |
if (p + 11 > end) { hashmap_i16s_destroy(map); croak("Truncated freeze data"); } |
|
419
|
0 |
0 |
if (p + vl + 4 > end) { hashmap_i16s_destroy(map); croak("Truncated freeze data"); } |
|
425
|
0 |
0 |
if (p > end) croak("Truncated freeze data"); |
|
434
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
435
|
0 |
0 |
RETVAL = (UV)self->capacity; |
|
442
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
450
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
453
|
0 |
0 |
if (!hashmap_i16s_swap(self, key, _nvs, (uint32_t)_nvl, _nvu, &old, &old_len, &old_utf8)) XSRETURN_UNDEF; |
|
455
|
0 |
0 |
if (old_utf8) SvUTF8_on(RETVAL); |
|
464
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
466
|
0 |
0 |
if (!clone) croak("Failed to clone"); |
|
467
|
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); |
|
474
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
475
|
0 |
0 |
if (!SvROK(href) || SvTYPE(SvRV(href)) != SVt_PVHV) |
|
|
0 |
0 |
if (!SvROK(href) || SvTYPE(SvRV(href)) != SVt_PVHV) |
|
478
|
0 |
0 |
hashmap_i16s_reserve(self, (size_t)HvUSEDKEYS(hv)); |
|
481
|
0 |
0 |
while ((he = hv_iternext(hv))) { |
|
492
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
493
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_i16s) |
|
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_i16s) |
|
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_i16s) |
|
497
|
0 |
0 |
uint32_t now = other->expires_at ? (uint32_t)time(NULL) : 0; |
|
499
|
0 |
0 |
for (i = 0; i < other->capacity; i++) { |
|
500
|
0 |
0 |
if (I16S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
|
0 |
0 |
if (I16S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
|
0 |
0 |
if (I16S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
|
0 |
0 |
if (I16S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
|
0 |
0 |
if (I16S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) |
|
508
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
510
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
512
|
0 |
0 |
for (i = 0; i < self->capacity; i++) { |
|
513
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (I16S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
518
|
0 |
0 |
: newSV(0); |
|
519
|
0 |
0 |
if (self->nodes[i].value && vutf8) SvUTF8_on(val); |
|
|
0 |
0 |
if (self->nodes[i].value && vutf8) SvUTF8_on(val); |
|
532
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
533
|
0 |
0 |
EXTRACT_STR_VAL(value); |
|
541
|
1 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapI16S, stash_i16s, "Data::HashMap::I16S", self_sv); |
|
542
|
0 |
1 |
EXTRACT_STR_VAL(default_sv); |
|
546
|
0 |
1 |
if (idx >= self->capacity) XSRETURN_UNDEF; |
|
547
|
1 |
0 |
if (self->nodes[idx].value) { |
|
549
|
0 |
1 |
if (HM_UNPACK_UTF8(self->nodes[idx].val_len)) SvUTF8_on(RETVAL); |