Branch Coverage

xs/i32s.xsi
Criterion Covered Total %
branch 147 674 21.8


line true false branch
7 3 11 EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip);
0 14 EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip);
0 14 EXTRACT_NEW_ARGS(_max_size, _ttl, _lru_skip);
9 0 14 if (!map) croak("Failed to create HashMap::I32S");
17 14 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
14 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 14 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 14 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
24 80420 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
80420 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 80420 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 80420 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
25 0 80420 EXTRACT_STR_VAL(value);
33 50010 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
50010 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 50010 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 50010 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
37 3 50007 if (!hashmap_i32s_get(self, key, &val, &val_len, &val_utf8))
40 1 50006 if (val_utf8) SvUTF8_on(RETVAL);
47 1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
51 0 1 if (!hashmap_i32s_get(self, key, &val, &val_len, &val_utf8))
60 80006 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
80006 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 80006 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 80006 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
68 1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
70 0 1 if (!hashmap_i32s_take(self, key, &val, &val_len, &val_utf8)) XSRETURN_UNDEF;
72 0 1 if (val_utf8) SvUTF8_on(RETVAL);
80 3 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
3 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 3 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 3 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
88 6 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
6 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 6 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 6 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
89 0 6 RETVAL = self->size;
96 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
97 0 0 RETVAL = self->max_size;
104 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
105 0 0 RETVAL = (UV)self->default_ttl;
112 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
113 0 0 RETVAL = (UV)self->lru_skip;
120 2 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
2 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 2 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 2 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", 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 (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now))
2 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now))
0 2 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now))
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now))
0 0 if (I32S_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(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", 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 (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
2 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 2 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_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(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", 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 (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
2 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 2 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_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(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
3 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 3 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 3 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", 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 (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
2 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 2 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_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(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
204 1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
205 0 1 uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0;
207 0 1 EXTEND(SP, (count < self->size ? count : self->size) * 2);
208 15 0 while (self->iter_pos < self->capacity && n < count) {
14 1 while (self->iter_pos < self->capacity && n < count) {
210 2 12 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
2 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 2 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
211 0 2 mXPUSHi(self->nodes[i].key);
212 2 0 if (self->nodes[i].value) {
214 0 2 if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(sv);
215 0 2 mXPUSHs(sv);
216 0 0 } else { XPUSHs(&PL_sv_undef); }
217 0 2 if (HM_UNLIKELY(self->lru_prev)) hashmap_i32s_lru_unlink(self, (uint32_t)i);
222 0 1 if (self->iter_pos >= self->capacity) self->iter_pos = 0;
223 1 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
1 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
1 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
228 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
229 0 0 uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0;
230 0 0 if (self->lru_prev) {
231 0 0 while (self->lru_tail != HM_LRU_NONE) {
233 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))) {
236 0 0 EXTEND(SP, 2);
237 0 0 mXPUSHi(self->nodes[idx].key);
238 0 0 if (self->nodes[idx].value) {
240 0 0 if (HM_UNPACK_UTF8(self->nodes[idx].val_len)) SvUTF8_on(sv);
241 0 0 mXPUSHs(sv);
242 0 0 } else { XPUSHs(&PL_sv_undef); }
245 0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
250 0 0 while (self->iter_pos < self->capacity) {
252 0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
253 0 0 EXTEND(SP, 2);
254 0 0 mXPUSHi(self->nodes[i].key);
255 0 0 if (self->nodes[i].value) {
257 0 0 if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(sv);
258 0 0 mXPUSHs(sv);
259 0 0 } else { XPUSHs(&PL_sv_undef); }
261 0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
272 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
273 0 0 uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0;
274 0 0 if (self->lru_prev) {
275 0 0 while (self->lru_head != HM_LRU_NONE) {
277 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))) {
280 0 0 EXTEND(SP, 2);
281 0 0 mXPUSHi(self->nodes[idx].key);
282 0 0 if (self->nodes[idx].value) {
284 0 0 if (HM_UNPACK_UTF8(self->nodes[idx].val_len)) SvUTF8_on(sv);
285 0 0 mXPUSHs(sv);
286 0 0 } else { XPUSHs(&PL_sv_undef); }
289 0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
294 0 0 if (self->iter_pos == 0) self->iter_pos = self->capacity;
295 0 0 while (self->iter_pos > 0) {
297 0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
298 0 0 EXTEND(SP, 2);
299 0 0 mXPUSHi(self->nodes[i].key);
300 0 0 if (self->nodes[i].value) {
302 0 0 if (HM_UNPACK_UTF8(self->nodes[i].val_len)) SvUTF8_on(sv);
303 0 0 mXPUSHs(sv);
304 0 0 } else { XPUSHs(&PL_sv_undef); }
306 0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
0 0 HM_MAYBE_COMPACT_XS(self, hashmap_i32s_compact);
317 3 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
3 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 3 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 3 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
323 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
324 0 0 if (!hashmap_i32s_reserve(self, (size_t)count))
330 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
336 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
337 0 0 uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0;
352 0 0 for (i = 0; i < self->capacity; i++) {
353 0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
359 0 0 if (self->nodes[i].value) sv_catpvn(buf, self->nodes[i].value, vl);
362 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) {
364 0 0 if (!rem) rem = 1;
384 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");
386 0 0 uint8_t ver = *p++; if (ver != 1) croak("Unsupported freeze version %d", ver);
387 0 0 uint8_t vid = *p++; if (vid != 5) croak("Variant mismatch: expected 5, got %d", vid);
393 0 0 if (!map) croak("Failed to create map for thaw");
394 0 0 if (cnt > 0) hashmap_i32s_reserve(map, (size_t)cnt);
396 0 0 for (j = 0; j < cnt; j++) {
397 0 0 if (p + 13 > end) { hashmap_i32s_destroy(map); croak("Truncated freeze data"); }
401 0 0 if (p + vl + 4 > end) { hashmap_i32s_destroy(map); croak("Truncated freeze data"); }
404 0 0 if (!hashmap_i32s_put(map, key, vstr, vl, vutf8, ttl)) { hashmap_i32s_destroy(map); croak("OOM during thaw"); }
405 0 0 if (ttl == 0 && map->expires_at) hashmap_i32s_persist(map, key);
0 0 if (ttl == 0 && map->expires_at) hashmap_i32s_persist(map, key);
408 0 0 if (p > end) croak("Truncated freeze data");
417 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
418 0 0 RETVAL = (UV)self->capacity;
425 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
433 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
436 0 0 if (!hashmap_i32s_swap(self, key, _nvs, (uint32_t)_nvl, _nvu, &old, &old_len, &old_utf8)) XSRETURN_UNDEF;
438 0 0 if (old_utf8) SvUTF8_on(RETVAL);
447 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
449 0 0 if (!clone) croak("Failed to clone");
450 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);
457 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
458 0 0 if (!SvROK(href) || SvTYPE(SvRV(href)) != SVt_PVHV)
0 0 if (!SvROK(href) || SvTYPE(SvRV(href)) != SVt_PVHV)
461 0 0 hashmap_i32s_reserve(self, (size_t)HvUSEDKEYS(hv));
464 0 0 while ((he = hv_iternext(hv))) {
475 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
476 0 0 if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_i32s)
0 0 if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_i32s)
0 0 if (!SvROK(other_sv) || !SvOBJECT(SvRV(other_sv)) || SvSTASH(SvRV(other_sv)) != stash_i32s)
480 0 0 uint32_t now = other->expires_at ? (uint32_t)time(NULL) : 0;
482 0 0 for (i = 0; i < other->capacity; i++) {
483 0 0 if (I32S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now))
0 0 if (I32S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now))
0 0 if (I32S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now))
0 0 if (I32S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now))
0 0 if (I32S_NODE_LIVE(other->nodes[i]) && !HM_TTL_SKIP_EXPIRED(other, i, now))
491 1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
1 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 1 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
493 0 1 uint32_t now = self->expires_at ? (uint32_t)time(NULL) : 0;
495 16 1 for (i = 0; i < self->capacity; i++) {
496 1 15 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
1 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 1 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
0 0 if (I32S_NODE_LIVE(self->nodes[i]) && !HM_TTL_SKIP_EXPIRED(self, i, now)) {
501 1 0 : newSV(0);
502 1 0 if (self->nodes[i].value && vutf8) SvUTF8_on(val);
0 1 if (self->nodes[i].value && vutf8) SvUTF8_on(val);
515 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
516 0 0 EXTRACT_STR_VAL(value);
524 0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
0 0 EXTRACT_MAP(HashMapI32S, stash_i32s, "Data::HashMap::I32S", self_sv);
525 0 0 EXTRACT_STR_VAL(default_sv);
528 0 0 if (idx >= self->capacity) XSRETURN_UNDEF;
529 0 0 if (self->nodes[idx].value) {
531 0 0 if (HM_UNPACK_UTF8(self->nodes[idx].val_len)) SvUTF8_on(RETVAL);