Branch Coverage

xs/ii.xs
Criterion Covered Total %
branch 343 570 60.1


line true false branch
8 2 135 if (!map) croak("HashMap::Shared::II: %s", errbuf[0] ? errbuf : "unknown error");
2 0 if (!map) croak("HashMap::Shared::II: %s", errbuf[0] ? errbuf : "unknown error");
17 0 17 if (!map) croak("HashMap::Shared::II: %s", errbuf[0] ? errbuf : "unknown error");
0 0 if (!map) croak("HashMap::Shared::II: %s", errbuf[0] ? errbuf : "unknown error");
25 0 152 if (!SvROK(self_sv)) return;
27 0 152 if (!h) return;
34 7205 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 7205 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 7205 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
35 7136 69 RETVAL = shm_ii_put(h, key, value);
42 6 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
43 1 5 if ((items - 1) % 2 != 0) croak("set_multi requires even number of arguments (key, value pairs)");
45 1 4 if (h->shard_handles) {
46 5 1 for (int i = 1; i < items; i += 2)
52 1008 4 for (int i = 1; i < items; i += 2)
57 0 5 RETVAL = count;
64 4 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 4 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 4 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
66 1 3 if (nkeys == 0) XSRETURN_EMPTY;
67 3 0 EXTEND(SP, nkeys);
0 3 EXTEND(SP, nkeys);
68 1 2 if (h->shard_handles) {
69 4 1 for (int i = 0; i < nkeys; i++) {
72 3 1 if (shm_ii_get(h, key, &val))
81 1 1 uint32_t now = h->expires_at ? shm_now() : 0;
88 7 2 for (int i = 0; i < nkeys; i++) {
94 7 2 for (int i = 0; i < nkeys; i++) {
101 9 0 for (uint32_t j = 0; j <= mask; j++) {
104 1 8 if (st == SHM_EMPTY) break;
105 2 6 if (st != tag) continue;
106 6 0 if (nodes[idx].key == key) {
107 3 3 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
3 0 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
1 2 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
113 5 2 if (found) mPUSHi(val);
116 5 2 if (i + 1 < nkeys) {
127 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
148 6 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
149 3 3 RETVAL = shm_ii_cas(h, key, expected, desired);
156 4 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 4 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 4 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
157 3 1 RETVAL = shm_ii_persist(h, key);
164 5 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 5 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 5 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
165 4 1 RETVAL = shm_ii_set_ttl(h, key, (uint32_t)ttl_sec);
172 891 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 891 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 891 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
174 86 805 if (!shm_ii_get(h, key, &value)) XSRETURN_UNDEF;
182 2785 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2785 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2785 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
183 2785 0 RETVAL = shm_ii_remove(h, key);
190 56 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 56 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 56 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
191 28 28 RETVAL = shm_ii_exists(h, key);
198 8 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
201 0 8 if (!ok) croak("HashMap::Shared::II: increment failed");
209 3 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 3 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 3 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
212 0 3 if (!ok) croak("HashMap::Shared::II: decrement failed");
220 6 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
223 0 6 if (!ok) croak("HashMap::Shared::II: incr_by failed");
231 68 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 68 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 68 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
232 0 68 RETVAL = (UV)shm_ii_size(h);
239 3 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 3 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 3 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
240 0 3 RETVAL = (UV)shm_ii_max_entries(h);
247 3 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 3 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 3 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
248 1 2 uint32_t ns = h->shard_handles ? h->num_shards : 1;
249 6 3 for (uint32_t si = 0; si < ns; si++) {
250 4 2 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
253 1 5 uint32_t now = sh->expires_at ? shm_now() : 0;
255 0 6 EXTEND(SP, hdr->size);
256 128 6 for (uint32_t i = 0; i < hdr->table_cap; i++) {
257 55 73 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
2 53 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
2 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
1 1 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
258 0 54 mXPUSHi(nodes[i].key);
265 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
266 1 1 uint32_t ns = h->shard_handles ? h->num_shards : 1;
267 5 2 for (uint32_t si = 0; si < ns; si++) {
268 4 1 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
271 0 5 uint32_t now = sh->expires_at ? shm_now() : 0;
273 0 5 EXTEND(SP, hdr->size);
274 112 5 for (uint32_t i = 0; i < hdr->table_cap; i++) {
275 53 59 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 53 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
276 0 53 mXPUSHi(nodes[i].value);
283 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
284 1 1 uint32_t ns = h->shard_handles ? h->num_shards : 1;
285 5 2 for (uint32_t si = 0; si < ns; si++) {
286 4 1 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
289 0 5 uint32_t now = sh->expires_at ? shm_now() : 0;
291 0 5 EXTEND(SP, hdr->size * 2);
292 112 5 for (uint32_t i = 0; i < hdr->table_cap; i++) {
293 53 59 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 53 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
294 0 53 mXPUSHi(nodes[i].key);
295 0 53 mXPUSHi(nodes[i].value);
304 662 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 662 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 662 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
306 649 13 if (shm_ii_each(h, &out_key, &out_value)) {
307 0 649 EXTEND(SP, 2);
308 0 649 mXPUSHi(out_key);
309 0 649 mXPUSHi(out_value);
318 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
325 7 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
331 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
333 1 1 uint32_t ns = h->shard_handles ? h->num_shards : 1;
334 5 2 for (uint32_t si = 0; si < ns; si++) {
335 4 1 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
338 0 5 uint32_t now = sh->expires_at ? shm_now() : 0;
340 112 5 for (uint32_t i = 0; i < hdr->table_cap; i++) {
341 52 60 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 52 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
345 0 52 if (!hv_store(hv, kbuf, klen, val, 0)) SvREFCNT_dec(val);
357 7 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
360 0 7 if (!rc) XSRETURN_UNDEF;
368 21 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 21 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 21 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
369 1 20 REQUIRE_TTL(h);
1 20 REQUIRE_TTL(h);
370 20 0 RETVAL = shm_ii_put_ttl(h, key, value, (uint32_t)ttl_sec);
377 5 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 5 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 5 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
378 0 5 RETVAL = (UV)shm_ii_max_size(h);
385 5 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 5 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 5 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
386 0 5 RETVAL = (UV)shm_ii_ttl(h);
393 5 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 5 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 5 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
395 2 3 if (!shm_ii_take(h, key, &out_value)) XSRETURN_UNDEF;
403 12 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 12 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 12 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
406 2 10 if (!shm_ii_pop(h, &out_key, &out_val)) XSRETURN_EMPTY;
407 0 10 EXTEND(SP, 2);
414 8 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
417 1 7 if (!shm_ii_shift(h, &out_key, &out_val)) XSRETURN_EMPTY;
418 0 7 EXTEND(SP, 2);
425 6 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
426 0 6 if (limit == 0) XSRETURN_EMPTY;
428 0 6 if (!entries) croak("drain: out of memory");
432 0 6 if (buf) SAVEFREEPV(buf);
433 0 6 EXTEND(SP, n * 2);
434 15 6 for (uint32_t i = 0; i < n; i++) {
443 8 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
444 0 8 RETVAL = (UV)shm_ii_flush_expired(h);
451 27 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 27 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 27 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
454 0 27 EXTEND(SP, 2);
461 4 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 4 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 4 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
469 9 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 9 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 9 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
470 6 3 RETVAL = shm_ii_touch(h, key);
477 8 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
478 5 3 RETVAL = shm_ii_reserve(h, (uint32_t)target);
485 11 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 11 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 11 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
493 6 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
501 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
502 0 2 RETVAL = (UV)shm_ii_stat_recoveries(h);
509 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
517 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
525 11 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 11 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 11 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
526 8 3 RETVAL = shm_ii_add(h, key, value);
533 6 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 6 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
534 4 2 RETVAL = shm_ii_update(h, key, value);
541 8 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 8 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
544 3 5 if (rc != 1) XSRETURN_UNDEF;
552 2 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
561 2 2 if (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) {
2 0 if (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) {
563 0 2 if (!h) croak("Attempted to use a destroyed Data::HashMap::Shared::II object");
566 0 2 if (items < 2) croak("Usage: Data::HashMap::Shared::II->unlink($path)");
569 2 0 RETVAL = (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) ?
3 1 RETVAL = (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) ?
570 2 2 shm_unlink_sharded(INT2PTR(ShmHandle*, SvIV(SvRV(self_or_class)))) :
578 33 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 33 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 33 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
580 2 31 if (remaining < 0) XSRETURN_UNDEF;
588 15 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 15 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 15 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
589 0 15 RETVAL = (UV)shm_ii_capacity(h);
596 7 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
597 0 7 RETVAL = (UV)shm_ii_tombstones(h);
604 18 0 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 18 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
0 18 EXTRACT_MAP("Data::HashMap::Shared::II", self_sv);
606 0 18 if (!c) croak("Failed to allocate cursor");
617 0 18 if (!SvROK(self_sv)) return;
619 0 18 if (!c) return;
622 18 0 if (h) shm_ii_flush_deferred(h);
628 745 0 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
0 745 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
0 745 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
630 731 14 if (shm_ii_cursor_next(c, &out_key, &out_value)) {
631 0 731 EXTEND(SP, 2);
632 0 731 mXPUSHi(out_key);
633 0 731 mXPUSHi(out_value);
641 2 0 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
0 2 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
0 2 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
647 5 0 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
0 5 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
0 5 EXTRACT_CURSOR("Data::HashMap::Shared::II::Cursor", self_sv);
648 3 2 RETVAL = shm_ii_cursor_seek(c, key);