| line |
true |
false |
branch |
|
7
|
9 |
38 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
|
4 |
43 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
|
0 |
47 |
EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip); |
|
9
|
0 |
47 |
if (!map) croak("Failed to create HashMap::SA"); |
|
18
|
47 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
47 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
47 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
47 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
25
|
81583 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
81583 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
81583 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
81583 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
26
|
0 |
81583 |
EXTRACT_STR_KEY(key_sv); |
|
29
|
0 |
81583 |
if (!RETVAL) SvREFCNT_dec(value); |
|
36
|
50026 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
50026 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
50026 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
50026 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
37
|
0 |
50026 |
EXTRACT_STR_KEY(key_sv); |
|
39
|
5 |
50021 |
if (!hashmap_sa_get(self, _kstr, (uint32_t)_klen, _khash, &val)) |
|
48
|
80505 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
80505 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
80505 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
80505 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
49
|
0 |
80505 |
EXTRACT_STR_KEY(key_sv); |
|
57
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
58
|
0 |
1 |
EXTRACT_STR_KEY(key_sv); |
|
60
|
0 |
1 |
if (!hashmap_sa_take(self, _kstr, (uint32_t)_klen, _khash, &val)) XSRETURN_UNDEF; |
|
68
|
5 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
5 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
5 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
5 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
69
|
0 |
5 |
EXTRACT_STR_KEY(key_sv); |
|
77
|
14 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
14 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
14 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
14 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
78
|
0 |
14 |
RETVAL = self->size; |
|
85
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
86
|
0 |
0 |
RETVAL = self->max_size; |
|
93
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
94
|
0 |
0 |
RETVAL = (UV)self->default_ttl; |
|
101
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
102
|
0 |
0 |
RETVAL = (UV)self->lru_skip; |
|
109
|
5 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
5 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
5 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
5 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
110
|
1 |
4 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
111
|
0 |
5 |
EXTEND(SP, self->size); |
|
113
|
304 |
5 |
for (i = 0; i < self->capacity; i++) { |
|
114
|
104 |
200 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
101 |
3 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
1 |
100 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
1 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
1 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
117
|
0 |
100 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(sv); |
|
118
|
0 |
100 |
mXPUSHs(sv); |
|
125
|
3 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
3 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
126
|
0 |
3 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
127
|
0 |
3 |
EXTEND(SP, self->size); |
|
129
|
272 |
3 |
for (i = 0; i < self->capacity; i++) { |
|
130
|
102 |
170 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
100 |
2 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
100 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
131
|
100 |
0 |
SV* sv = self->nodes[i].value ? SvREFCNT_inc((SV*)self->nodes[i].value) : &PL_sv_undef; |
|
132
|
0 |
100 |
mXPUSHs(sv); |
|
139
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
140
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
141
|
0 |
1 |
EXTEND(SP, self->size * 2); |
|
143
|
16 |
1 |
for (i = 0; i < self->capacity; i++) { |
|
144
|
2 |
14 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
2 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
2 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
147
|
0 |
2 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
148
|
0 |
2 |
mXPUSHs(ksv); |
|
149
|
2 |
0 |
SV* vsv = self->nodes[i].value ? SvREFCNT_inc((SV*)self->nodes[i].value) : &PL_sv_undef; |
|
150
|
0 |
2 |
mXPUSHs(vsv); |
|
157
|
48 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
48 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
48 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
48 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
158
|
0 |
48 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
159
|
96 |
4 |
while (self->iter_pos < self->capacity) { |
|
161
|
44 |
52 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
44 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
44 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
162
|
0 |
44 |
EXTEND(SP, 2); |
|
166
|
0 |
44 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
167
|
0 |
44 |
mXPUSHs(ksv); |
|
169
|
0 |
44 |
if (GIMME_V == G_SCALAR) XSRETURN(1); |
|
170
|
44 |
0 |
SV* vsv = self->nodes[i].value ? SvREFCNT_inc((SV*)self->nodes[i].value) : &PL_sv_undef; |
|
171
|
0 |
44 |
mXPUSHs(vsv); |
|
181
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
187
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
188
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
190
|
0 |
0 |
EXTEND(SP, (count < self->size ? count : self->size) * 2); |
|
191
|
0 |
0 |
while (self->iter_pos < self->capacity && n < count) { |
|
|
0 |
0 |
while (self->iter_pos < self->capacity && n < count) { |
|
193
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
196
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
197
|
0 |
0 |
mXPUSHs(ksv); |
|
199
|
0 |
0 |
if (self->nodes[i].value) { |
|
200
|
0 |
0 |
mXPUSHs((SV*)self->nodes[i].value); |
|
201
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
203
|
0 |
0 |
if (HM_UNLIKELY(self->lru_prev)) hashmap_sa_lru_unlink(self, (uint32_t)i); |
|
208
|
0 |
0 |
if (self->iter_pos >= self->capacity) self->iter_pos = 0; |
|
209
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
214
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
215
|
0 |
0 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
216
|
0 |
0 |
if (self->lru_prev) { |
|
217
|
0 |
0 |
while (self->lru_tail != HM_LRU_NONE) { |
|
219
|
0 |
0 |
if (HM_UNLIKELY(HM_TTL_SKIP_EXPIRED(self, idx, now))) { |
|
|
0 |
0 |
if (HM_UNLIKELY(HM_TTL_SKIP_EXPIRED(self, idx, now))) { |
|
|
0 |
0 |
if (HM_UNLIKELY(HM_TTL_SKIP_EXPIRED(self, idx, now))) { |
|
|
0 |
0 |
if (HM_UNLIKELY(HM_TTL_SKIP_EXPIRED(self, idx, now))) { |
|
222
|
0 |
0 |
EXTEND(SP, 2); |
|
225
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[idx].key_len)) SvUTF8_on(ksv); |
|
226
|
0 |
0 |
mXPUSHs(ksv); |
|
228
|
0 |
0 |
if (self->nodes[idx].value) { |
|
229
|
0 |
0 |
mXPUSHs((SV*)self->nodes[idx].value); |
|
230
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
234
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
239
|
0 |
0 |
while (self->iter_pos < self->capacity) { |
|
241
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
242
|
0 |
0 |
EXTEND(SP, 2); |
|
245
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
246
|
0 |
0 |
mXPUSHs(ksv); |
|
248
|
0 |
0 |
if (self->nodes[i].value) { |
|
249
|
0 |
0 |
mXPUSHs((SV*)self->nodes[i].value); |
|
250
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
253
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
264
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
265
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
266
|
1 |
0 |
if (self->lru_prev) { |
|
267
|
1 |
0 |
while (self->lru_head != HM_LRU_NONE) { |
|
269
|
0 |
1 |
if (HM_UNLIKELY(HM_TTL_SKIP_EXPIRED(self, idx, now))) { |
|
|
0 |
0 |
if (HM_UNLIKELY(HM_TTL_SKIP_EXPIRED(self, idx, now))) { |
|
|
0 |
1 |
if (HM_UNLIKELY(HM_TTL_SKIP_EXPIRED(self, idx, now))) { |
|
|
0 |
0 |
if (HM_UNLIKELY(HM_TTL_SKIP_EXPIRED(self, idx, now))) { |
|
272
|
0 |
1 |
EXTEND(SP, 2); |
|
275
|
1 |
0 |
if (HM_UNPACK_UTF8(self->nodes[idx].key_len)) SvUTF8_on(ksv); |
|
276
|
0 |
1 |
mXPUSHs(ksv); |
|
278
|
1 |
0 |
if (self->nodes[idx].value) { |
|
279
|
0 |
1 |
mXPUSHs((SV*)self->nodes[idx].value); |
|
280
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
284
|
1 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
1 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
289
|
0 |
0 |
if (self->iter_pos == 0) self->iter_pos = self->capacity; |
|
290
|
0 |
0 |
while (self->iter_pos > 0) { |
|
292
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
293
|
0 |
0 |
EXTEND(SP, 2); |
|
296
|
0 |
0 |
if (HM_UNPACK_UTF8(self->nodes[i].key_len)) SvUTF8_on(ksv); |
|
297
|
0 |
0 |
mXPUSHs(ksv); |
|
299
|
0 |
0 |
if (self->nodes[i].value) { |
|
300
|
0 |
0 |
mXPUSHs((SV*)self->nodes[i].value); |
|
301
|
0 |
0 |
} else { XPUSHs(&PL_sv_undef); } |
|
304
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
|
0 |
0 |
HM_MAYBE_COMPACT_XS(self, hashmap_sa_compact); |
|
315
|
3 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
3 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
3 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
321
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
322
|
0 |
0 |
if (!hashmap_sa_reserve(self, (size_t)count)) |
|
328
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
343
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
344
|
0 |
0 |
RETVAL = (UV)self->capacity; |
|
351
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
352
|
0 |
0 |
EXTRACT_STR_KEY(key_sv); |
|
360
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
361
|
0 |
0 |
EXTRACT_STR_KEY(key_sv); |
|
364
|
0 |
0 |
if (!hashmap_sa_swap(self, _kstr, (uint32_t)_klen, _khash, (void*)new_val, &old)) { SvREFCNT_dec(new_val); XSRETURN_UNDEF; } |
|
373
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
375
|
0 |
0 |
if (!clone) croak("Failed to clone"); |
|
376
|
0 |
0 |
{ size_t _i; for (_i = 0; _i < clone->capacity; _i++) { |
|
377
|
0 |
0 |
if (SA_NODE_LIVE(clone->nodes[_i]) && clone->nodes[_i].value) |
|
|
0 |
0 |
if (SA_NODE_LIVE(clone->nodes[_i]) && clone->nodes[_i].value) |
|
|
0 |
0 |
if (SA_NODE_LIVE(clone->nodes[_i]) && clone->nodes[_i].value) |
|
380
|
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); |
|
387
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
388
|
0 |
0 |
if (!SvROK(href) || SvTYPE(SvRV(href)) != SVt_PVHV) |
|
|
0 |
0 |
if (!SvROK(href) || SvTYPE(SvRV(href)) != SVt_PVHV) |
|
391
|
0 |
0 |
hashmap_sa_reserve(self, (size_t)HvUSEDKEYS(hv)); |
|
394
|
0 |
0 |
while ((he = hv_iternext(hv))) { |
|
395
|
0 |
0 |
STRLEN klen; const char* kstr = HePV(he, klen); |
|
396
|
0 |
0 |
bool kutf8 = HeUTF8(he) ? true : false; |
|
400
|
0 |
0 |
if (!hashmap_sa_put(self, kstr, (uint32_t)klen, khash, kutf8, (void*)val, 0)) SvREFCNT_dec(val); |
|
406
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
407
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_sa) |
|
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_sa) |
|
|
0 |
0 |
if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_sa) |
|
411
|
0 |
0 |
uint32_t now = other->expires_at ? (uint32_t)time(NULL) : 0; |
|
413
|
0 |
0 |
for (i = 0; i < other->capacity; i++) { |
|
414
|
0 |
0 |
if (SA_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now)) { |
|
416
|
0 |
0 |
if (!hashmap_sa_put(self, other->nodes[i].key, HM_UNPACK_LEN(other->nodes[i].key_len), other->nodes[i].key_hash, HM_UNPACK_UTF8(other->nodes[i].key_len), (void*)other->nodes[i].value, 0)) SvREFCNT_dec((SV*)other->nodes[i].value); |
|
424
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
426
|
0 |
1 |
uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0; |
|
428
|
16 |
1 |
for (i = 0; i < self->capacity; i++) { |
|
429
|
1 |
15 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
1 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
1 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
|
0 |
0 |
if (SA_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) { |
|
432
|
1 |
0 |
SV* val = self->nodes[i].value ? SvREFCNT_inc((SV*)self->nodes[i].value) : &PL_sv_undef; |
|
433
|
0 |
1 |
(void)hv_store(hv, self->nodes[i].key, kutf8 ? -(I32)klen : (I32)klen, val, 0); |
|
443
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
1 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
1 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
444
|
0 |
1 |
EXTRACT_STR_KEY(key_sv); |
|
447
|
0 |
1 |
if (!RETVAL) SvREFCNT_dec(value); |
|
454
|
4 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
4 |
0 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
4 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
|
0 |
4 |
EXTRACT_MAP(HashMapSA, stash_sa, "Data::HashMap::SA", self_sv); |
|
455
|
0 |
4 |
EXTRACT_STR_KEY(key_sv); |
|
459
|
0 |
4 |
if (idx >= self->capacity) { |
|
463
|
1 |
3 |
if (was_found) SvREFCNT_dec(default_value); |