Branch Coverage

xs/i32.xs
Criterion Covered Total %
branch 66 570 11.5


line true false branch
8 0 4 if (!map) croak("HashMap::Shared::I32: %s", errbuf[0] ? errbuf : "unknown error");
0 0 if (!map) croak("HashMap::Shared::I32: %s", errbuf[0] ? errbuf : "unknown error");
17 0 0 if (!map) croak("HashMap::Shared::I32: %s", errbuf[0] ? errbuf : "unknown error");
0 0 if (!map) croak("HashMap::Shared::I32: %s", errbuf[0] ? errbuf : "unknown error");
25 0 4 if (!SvROK(self_sv)) return;
27 0 4 if (!h) return;
34 1014 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1014 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1014 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
35 1014 0 RETVAL = shm_i32_put(h, key, value);
42 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
43 0 0 if ((items - 1) % 2 != 0) croak("set_multi requires even number of arguments (key, value pairs)");
45 0 0 if (h->shard_handles) {
46 0 0 for (int i = 1; i < items; i += 2)
52 0 0 for (int i = 1; i < items; i += 2)
57 0 0 RETVAL = count;
64 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
66 0 0 if (nkeys == 0) XSRETURN_EMPTY;
67 0 0 EXTEND(SP, nkeys);
0 0 EXTEND(SP, nkeys);
68 0 0 if (h->shard_handles) {
69 0 0 for (int i = 0; i < nkeys; i++) {
72 0 0 if (shm_i32_get(h, key, &val))
81 0 0 uint32_t now = h->expires_at ? shm_now() : 0;
88 0 0 for (int i = 0; i < nkeys; i++) {
94 0 0 for (int i = 0; i < nkeys; i++) {
101 0 0 for (uint32_t j = 0; j <= mask; j++) {
104 0 0 if (st == SHM_EMPTY) break;
105 0 0 if (st != tag) continue;
106 0 0 if (nodes[idx].key == key) {
107 0 0 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
0 0 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
0 0 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
113 0 0 if (found) mPUSHi(val);
116 0 0 if (i + 1 < nkeys) {
127 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
148 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
149 1 0 RETVAL = shm_i32_cas(h, key, expected, desired);
156 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
157 0 0 RETVAL = shm_i32_persist(h, key);
164 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
165 0 0 RETVAL = shm_i32_set_ttl(h, key, (uint32_t)ttl_sec);
172 7 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
174 0 7 if (!shm_i32_get(h, key, &value)) XSRETURN_UNDEF;
182 500 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 500 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 500 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
183 500 0 RETVAL = shm_i32_remove(h, key);
190 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
191 0 0 RETVAL = shm_i32_exists(h, key);
198 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
201 0 1 if (!ok) croak("HashMap::Shared::I32: increment failed");
209 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
212 0 0 if (!ok) croak("HashMap::Shared::I32: decrement failed");
220 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
223 0 1 if (!ok) croak("HashMap::Shared::I32: incr_by failed");
231 2 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
232 0 2 RETVAL = (UV)shm_i32_size(h);
239 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
240 0 0 RETVAL = (UV)shm_i32_max_entries(h);
247 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
248 0 0 uint32_t ns = h->shard_handles ? h->num_shards : 1;
249 0 0 for (uint32_t si = 0; si < ns; si++) {
250 0 0 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
253 0 0 uint32_t now = sh->expires_at ? shm_now() : 0;
255 0 0 EXTEND(SP, hdr->size);
256 0 0 for (uint32_t i = 0; i < hdr->table_cap; i++) {
257 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))
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))
258 0 0 mXPUSHi(nodes[i].key);
265 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
266 0 1 uint32_t ns = h->shard_handles ? h->num_shards : 1;
267 1 1 for (uint32_t si = 0; si < ns; si++) {
268 0 1 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
271 0 1 uint32_t now = sh->expires_at ? shm_now() : 0;
273 0 1 EXTEND(SP, hdr->size);
274 16 1 for (uint32_t i = 0; i < hdr->table_cap; i++) {
275 10 6 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 10 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 10 mXPUSHi(nodes[i].value);
283 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
284 0 0 uint32_t ns = h->shard_handles ? h->num_shards : 1;
285 0 0 for (uint32_t si = 0; si < ns; si++) {
286 0 0 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
289 0 0 uint32_t now = sh->expires_at ? shm_now() : 0;
291 0 0 EXTEND(SP, hdr->size * 2);
292 0 0 for (uint32_t i = 0; i < hdr->table_cap; i++) {
293 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)) {
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 0 mXPUSHi(nodes[i].key);
295 0 0 mXPUSHi(nodes[i].value);
304 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
306 0 0 if (shm_i32_each(h, &out_key, &out_value)) {
307 0 0 EXTEND(SP, 2);
308 0 0 mXPUSHi(out_key);
309 0 0 mXPUSHi(out_value);
318 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
325 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
331 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
333 0 0 uint32_t ns = h->shard_handles ? h->num_shards : 1;
334 0 0 for (uint32_t si = 0; si < ns; si++) {
335 0 0 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
338 0 0 uint32_t now = sh->expires_at ? shm_now() : 0;
340 0 0 for (uint32_t i = 0; i < hdr->table_cap; i++) {
341 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)) {
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 0 if (!hv_store(hv, kbuf, klen, val, 0)) SvREFCNT_dec(val);
357 2 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
360 0 2 if (!rc) XSRETURN_UNDEF;
368 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
369 0 0 REQUIRE_TTL(h);
0 0 REQUIRE_TTL(h);
370 0 0 RETVAL = shm_i32_put_ttl(h, key, value, (uint32_t)ttl_sec);
377 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
378 0 0 RETVAL = (UV)shm_i32_max_size(h);
385 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
386 0 0 RETVAL = (UV)shm_i32_ttl(h);
393 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
395 0 0 if (!shm_i32_take(h, key, &out_value)) XSRETURN_UNDEF;
403 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
406 0 0 if (!shm_i32_pop(h, &out_key, &out_val)) XSRETURN_EMPTY;
407 0 0 EXTEND(SP, 2);
414 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
417 0 0 if (!shm_i32_shift(h, &out_key, &out_val)) XSRETURN_EMPTY;
418 0 0 EXTEND(SP, 2);
425 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
426 0 0 if (limit == 0) XSRETURN_EMPTY;
428 0 0 if (!entries) croak("drain: out of memory");
432 0 0 if (buf) SAVEFREEPV(buf);
433 0 0 EXTEND(SP, n * 2);
434 0 0 for (uint32_t i = 0; i < n; i++) {
443 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
444 0 0 RETVAL = (UV)shm_i32_flush_expired(h);
451 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
454 0 0 EXTEND(SP, 2);
461 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
469 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
470 0 0 RETVAL = shm_i32_touch(h, key);
477 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
478 0 0 RETVAL = shm_i32_reserve(h, (uint32_t)target);
485 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
493 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
501 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
502 0 0 RETVAL = (UV)shm_i32_stat_recoveries(h);
509 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
517 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
525 2 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
526 1 1 RETVAL = shm_i32_add(h, key, value);
533 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
534 1 0 RETVAL = shm_i32_update(h, key, value);
541 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
544 0 1 if (rc != 1) XSRETURN_UNDEF;
552 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
561 0 0 if (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) {
0 0 if (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) {
563 0 0 if (!h) croak("Attempted to use a destroyed Data::HashMap::Shared::I32 object");
566 0 0 if (items < 2) croak("Usage: Data::HashMap::Shared::I32->unlink($path)");
569 0 0 RETVAL = (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) ?
0 0 RETVAL = (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) ?
570 0 0 shm_unlink_sharded(INT2PTR(ShmHandle*, SvIV(SvRV(self_or_class)))) :
578 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
580 0 0 if (remaining < 0) XSRETURN_UNDEF;
588 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
589 0 0 RETVAL = (UV)shm_i32_capacity(h);
596 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
597 0 0 RETVAL = (UV)shm_i32_tombstones(h);
604 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
606 0 0 if (!c) croak("Failed to allocate cursor");
617 0 0 if (!SvROK(self_sv)) return;
619 0 0 if (!c) return;
622 0 0 if (h) shm_i32_flush_deferred(h);
628 0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
630 0 0 if (shm_i32_cursor_next(c, &out_key, &out_value)) {
631 0 0 EXTEND(SP, 2);
632 0 0 mXPUSHi(out_key);
633 0 0 mXPUSHi(out_value);
641 0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
647 0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
648 0 0 RETVAL = shm_i32_cursor_seek(c, key);