Branch Coverage

xs/sa.xsi
Criterion Covered Total %
branch 158 622 25.4


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);