| line |
true |
false |
branch |
|
23
|
3158694 |
0 |
if (ofs) { |
|
33
|
27 |
3158667 |
if (is_utf8 > 1) { |
|
37
|
414 |
3158253 |
if (is_utf8) { |
|
41
|
3158253 |
0 |
if (ptr) { |
|
51
|
189 |
1353726 |
if (index >= mph->num_buckets) { |
|
56
|
1353726 |
0 |
if (key_sv) { |
|
59
|
0 |
1353726 |
if (val_sv) { |
|
81
|
252 |
1804716 |
if (SvUTF8(key_sv)) { |
|
86
|
1804968 |
0 |
key_pv= SvPV(key_sv,key_len); |
|
92
|
0 |
1804968 |
if (!bucket->xor_val) |
|
96
|
1203312 |
601656 |
if ( mph->variant > 0 && bucket->index < 0 ) { |
|
|
444852 |
758460 |
if ( mph->variant > 0 && bucket->index < 0 ) { |
|
99
|
378408 |
981708 |
HASH2INDEX(index,h2,bucket->xor_val,mph->num_buckets,mph->variant); |
|
103
|
1804968 |
0 |
if (bucket->key_len == key_len && memEQ(key_pv,got_key_pv,key_len)) { |
|
|
1804968 |
0 |
if (bucket->key_len == key_len && memEQ(key_pv,got_key_pv,key_len)) { |
|
104
|
1804968 |
0 |
if (val_sv) { |
|
120
|
330 |
0 |
if (error) |
|
122
|
0 |
330 |
if (fd < 0) { |
|
123
|
0 |
0 |
if (error) |
|
127
|
0 |
330 |
if (fstat(fd,&st)==-1) { |
|
128
|
0 |
0 |
if (error) |
|
132
|
0 |
330 |
if (st.st_size < sizeof(struct mph_header)) { |
|
133
|
0 |
0 |
if (error) |
|
138
|
0 |
330 |
if (ptr == MAP_FAILED) { |
|
139
|
0 |
0 |
if (error) |
|
147
|
7 |
323 |
if (head->magic_num != MAGIC_DECIMAL) { |
|
148
|
0 |
7 |
if (head->magic_num == MAGIC_BIG_ENDIAN_DECIMAL) { |
|
149
|
0 |
0 |
if (error) |
|
152
|
7 |
0 |
if (error) |
|
156
|
4 |
319 |
if (head->variant > 3) { |
|
157
|
4 |
0 |
if (error) |
|
161
|
126 |
193 |
alignment = head->variant < 3 ? sizeof(U64)*2 : sizeof(U64); |
|
163
|
0 |
319 |
if (st.st_size % alignment) { |
|
164
|
0 |
0 |
if (error) |
|
168
|
316 |
3 |
if ( |
|
169
|
313 |
3 |
head->table_ofs < head->state_ofs || |
|
170
|
310 |
3 |
head->key_flags_ofs < head->table_ofs || |
|
171
|
307 |
3 |
head->val_flags_ofs < head->key_flags_ofs || |
|
172
|
3 |
304 |
head->str_buf_ofs < head->val_flags_ofs || |
|
175
|
15 |
0 |
if (error) |
|
179
|
241 |
63 |
if (flags & MPH_F_VALIDATE) { |
|
185
|
178 |
63 |
if (head->variant >= 3) { |
|
188
|
177 |
1 |
if (have_file_checksum != want_file_checksum) { |
|
189
|
177 |
0 |
if (error) |
|
197
|
0 |
63 |
if (head->table_checksum != table_checksum) { |
|
198
|
0 |
0 |
if (error) |
|
204
|
0 |
63 |
st.st_size - head->str_buf_ofs - (head->variant > 2 ? sizeof(U64) : 0) ); |
|
205
|
0 |
63 |
if (head->str_buf_checksum != str_buf_checksum) { |
|
206
|
0 |
0 |
if (error) |
|
224
|
1 |
903193 |
if (SvROK(sv)) { |
|
228
|
0 |
903193 |
if (SvOK(sv)) { |
|
|
0 |
0 |
if (SvOK(sv)) { |
|
|
0 |
0 |
if (SvOK(sv)) { |
|
230
|
752828 |
150365 |
char *pv= SvPV(sv,pv_len); |
|
231
|
1 |
903192 |
if (pv_len > 0xFFFF) |
|
233
|
174 |
903018 |
if (SvUTF8(sv)) { |
|
234
|
87 |
87 |
if (downgrade) |
|
236
|
156 |
18 |
if (SvUTF8(normalized_sv)) { |
|
253
|
176 |
208 |
if (r) { |
|
264
|
504 |
86 |
while (n_copy) { |
|
265
|
162 |
342 |
if (n_copy & 1) n_bits++; |
|
269
|
62 |
24 |
if ( variant > 1 || n_bits > 1 ) { |
|
|
16 |
46 |
if ( variant > 1 || n_bits > 1 ) { |
|
270
|
32 |
8 |
return variant ? INT32_MAX : UINT32_MAX; |
|
293
|
451597 |
86 |
while (he= hv_iternext(source_hv)) { |
|
306
|
0 |
451597 |
if (!val_sv) croak("panic: no sv for value?"); |
|
307
|
0 |
451597 |
if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue; |
|
|
0 |
0 |
if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue; |
|
|
0 |
0 |
if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue; |
|
|
0 |
0 |
if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue; |
|
330
|
451595 |
0 |
key_pv= (U8 *)SvPV(key_normalized_sv,key_len); |
|
336
|
86 |
0 |
if (buf_length_sv) |
|
347
|
451595 |
86 |
for (i=0; i
|
|
358
|
451595 |
0 |
if (!got_psv || !SvROK(*got_psv)) croak("panic: bad item in keys_av"); |
|
|
0 |
451595 |
if (!got_psv || !SvROK(*got_psv)) croak("panic: bad item in keys_av"); |
|
361
|
0 |
451595 |
if (!h0_he) croak("panic: no h0_he?"); |
|
363
|
225564 |
226031 |
h0= SvUV(h0_sv); |
|
369
|
0 |
451595 |
if (!got_psv) |
|
371
|
285829 |
165766 |
if (!SvPOK(*got_psv)) |
|
376
|
0 |
451595 |
if (!got_psv) |
|
379
|
285829 |
165766 |
if (!SvROK(*got_psv)) { |
|
397
|
451539 |
86 |
for( i = 0 ; i < keybuckets_count ; i++ ) { |
|
403
|
165710 |
285829 |
if (!got) continue; |
|
406
|
0 |
285829 |
if (len<1) continue; |
|
409
|
285548 |
281 |
if (SvPOK(*got)) { |
|
426
|
0 |
285668 |
if (!buckets_rvp) croak("panic: out of memory in buckets_av lvalue fetch"); |
|
427
|
103625 |
182043 |
if (!SvROK(*buckets_rvp)) { |
|
429
|
0 |
103625 |
if (!idx1_hv) croak("panic: out of memory creating new hash in buckets_av idx %u",idx1); |
|
437
|
285668 |
0 |
hv_setuv_with_keysv(idx1_hv,MPH_KEYSV_XOR_VAL,xor_val); |
|
438
|
285668 |
0 |
hv_setuv_with_keysv(idx1_hv,MPH_KEYSV_H1_KEYS,keys_in_bucket_count); |
|
441
|
451373 |
285668 |
for (i= 0, idx2= idx_start; i < keys_in_bucket_count; i++,idx2++) { |
|
449
|
0 |
451373 |
if (!keys_rvp) croak("panic: no key_info in bucket %d", i); |
|
453
|
0 |
451373 |
if (!buckets_rvp) croak("panic: out of memory in lvalue fetch to buckets_av"); |
|
455
|
347759 |
103614 |
if (!SvROK(*buckets_rvp)) { |
|
460
|
103614 |
0 |
hv_copy_with_keysv(idx2_hv,keys_hv,MPH_KEYSV_XOR_VAL); |
|
461
|
103614 |
0 |
hv_copy_with_keysv(idx2_hv,keys_hv,MPH_KEYSV_H1_KEYS); |
|
469
|
451373 |
0 |
hv_setuv_with_keysv(keys_hv,MPH_KEYSV_IDX,*idx2); |
|
478
|
212 |
0 |
U32 *idx1_start= (U32 *)SvPV(idx1_packed_sv,idx1_packed_sv_len); |
|
482
|
174450 |
196 |
for (idx1_ptr= idx1_start; idx1_ptr < idx1_end; idx1_ptr++) { |
|
494
|
0 |
174450 |
if (!got) |
|
499
|
0 |
174450 |
if (!got) |
|
503
|
174450 |
0 |
h2_start= (U32 *)SvPV(h2_sv,h2_strlen); |
|
511
|
16 |
15728028 |
if (xor_val == max_xor_val) { |
|
516
|
15997482 |
174434 |
while (h2_ptr < h2_end) { |
|
519
|
206008 |
15791474 |
HASH2INDEX(idx2,*h2_ptr,xor_val,bucket_count,variant); |
|
520
|
15553307 |
444175 |
if (is_used[idx2]) |
|
522
|
233416 |
443888 |
for (check_idx= idx2_start; check_idx < idx2_ptr; check_idx++) { |
|
523
|
287 |
233129 |
if (*check_idx == idx2) |
|
540
|
46 |
0 |
U32 *idx1_start= (U32 *)SvPV(idx1_packed_sv,idx1_packed_sv_len); |
|
546
|
111234 |
46 |
for (idx1_ptr= idx1_start; idx1_ptr < idx1_end; idx1_ptr++) { |
|
552
|
412009 |
0 |
while (singleton_pos < bucket_count && is_used[singleton_pos]) { |
|
|
300775 |
111234 |
while (singleton_pos < bucket_count && is_used[singleton_pos]) { |
|
555
|
0 |
111234 |
if (singleton_pos == bucket_count) |
|
560
|
0 |
111234 |
if (!got) |
|
583
|
0 |
86 |
Newxz(idx2_start, av_top_index(by_length_av)+1, U32); |
|
587
|
277 |
70 |
for (len_idx= av_top_index(by_length_av); len_idx > 0 && !bad_idx; len_idx--) { |
|
|
261 |
16 |
for (len_idx= av_top_index(by_length_av); len_idx > 0 && !bad_idx; len_idx--) { |
|
592
|
258 |
3 |
if (!idx1_packed_sv || !SvPOK(*idx1_packed_sv)) |
|
|
0 |
258 |
if (!idx1_packed_sv || !SvPOK(*idx1_packed_sv)) |
|
595
|
69 |
189 |
if (len_idx == 1 && variant) { |
|
|
46 |
23 |
if (len_idx == 1 && variant) { |
|
669
|
9 |
0 |
U8 *str_pv= (U8 *)SvPV(str_sv,str_len); |
|
670
|
9 |
0 |
state_pv= (U8 *)SvPV(state_sv,state_len); |
|
671
|
0 |
9 |
if (state_len != STADTX_STATE_BYTES) { |
|
691
|
0 |
91 |
if (!SvOK(base_seed_sv)) |
|
|
0 |
0 |
if (!SvOK(base_seed_sv)) |
|
|
0 |
0 |
if (!SvOK(base_seed_sv)) |
|
693
|
0 |
91 |
if (SvROK(base_seed_sv)) |
|
696
|
91 |
0 |
seed_pv= (U8 *)SvPV(seed_sv,seed_len); |
|
698
|
0 |
91 |
if (seed_len != STADTX_SEED_BYTES) { |
|
699
|
0 |
0 |
if (SvREADONLY(base_seed_sv)) { |
|
700
|
0 |
0 |
if (seed_len < STADTX_SEED_BYTES) { |
|
704
|
0 |
0 |
else if (seed_len > STADTX_SEED_BYTES) { |
|
710
|
0 |
0 |
if (seed_len < STADTX_SEED_BYTES) { |
|
712
|
0 |
0 |
while (seed_len < STADTX_SEED_BYTES) { |
|
718
|
0 |
0 |
seed_pv= (U8 *)SvPV(seed_sv,seed_len); |
|
726
|
91 |
0 |
state_pv= (U8 *)SvPV(RETVAL,state_len); |
|
769
|
88 |
0 |
if (he) { |
|
770
|
0 |
88 |
variant= SvUV(HeVAL(he)); |
|
776
|
88 |
0 |
if (he) { |
|
777
|
0 |
88 |
compute_flags= SvUV(HeVAL(he)); |
|
783
|
88 |
0 |
if (he) { |
|
785
|
88 |
0 |
state_pv= (U8 *)SvPV(state_sv,state_len); |
|
786
|
0 |
88 |
if (state_len != STADTX_STATE_BYTES) { |
|
794
|
88 |
0 |
if (he) { |
|
801
|
88 |
0 |
if (he) { |
|
808
|
88 |
0 |
if (he) { |
|
810
|
0 |
88 |
if (SvROK(rv)) { |
|
831
|
1 |
85 |
if (compute_flags & MPH_F_DETERMINISTIC) |
|
874
|
0 |
64 |
U32 buf_length= SvUV(buf_length_sv); |
|
878
|
64 |
0 |
char *state_pv= SvPV(state_sv, state_len); |
|
880
|
63 |
1 |
U32 alignment= variant < 3 ? 2*sizeof(U64) : sizeof(U64); |
|
885
|
0 |
64 |
U32 str_rlen= _roundup( buf_length |
|
|
63 |
1 |
U32 str_rlen= _roundup( buf_length |
|
887
|
0 |
0 |
+ ( SvOK(comment_sv) ? sv_len(comment_sv) + 1 : 1 ) |
|
|
0 |
0 |
+ ( SvOK(comment_sv) ? sv_len(comment_sv) + 1 : 1 ) |
|
940
|
64 |
0 |
pv= SvPV(comment_sv,pv_len); |
|
944
|
451247 |
64 |
for (i= 0; i < bucket_count; i++) { |
|
953
|
285603 |
165644 |
if (xor_val_he) { |
|
954
|
0 |
285603 |
table[i].xor_val= SvUV(HeVAL(xor_val_he)); |
|
958
|
451247 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451247 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451247 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451247 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451247 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451247 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
959
|
451247 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451247 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451247 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451247 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
451247 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
50 |
451197 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
50 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
50 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
451197 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
50 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
50 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
0 |
50 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
|
50 |
0 |
SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); |
|
960
|
451247 |
0 |
if (key_is_utf8_he) { |
|
961
|
0 |
451247 |
UV u= SvUV(HeVAL(key_is_utf8_he)); |
|
966
|
451247 |
0 |
if (val_is_utf8_he) { |
|
967
|
0 |
451247 |
UV u= SvUV(HeVAL(val_is_utf8_he)); |
|
973
|
1 |
63 |
if (variant > 2) { |
|
979
|
63 |
1 |
if (r) { |
|
983
|
1 |
63 |
if (variant > 2) { |
|
1007
|
330 |
0 |
char *file_pv= SvPV(file_sv,file_len); |
|
1009
|
203 |
127 |
if (mmap_status < 0) { |
|
1026
|
127 |
0 |
struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv); |
|
1028
|
0 |
127 |
SvOK_off(mount_sv); |
|
1039
|
1353915 |
0 |
struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv); |
|
1040
|
1353915 |
0 |
SV* key_sv= items > 2 ? ST(2) : NULL; |
|
1041
|
0 |
1353915 |
SV* val_sv= items > 3 ? ST(3) : NULL; |
|
1042
|
0 |
1353915 |
if (items > 4) |
|
1057
|
1804968 |
0 |
SV* val_sv= items > 2 ? ST(2) : NULL; |
|
1058
|
1804968 |
0 |
struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv); |
|
1059
|
0 |
1804968 |
if (items > 3) |
|
1092
|
0 |
1008 |
if (!got) |
|
1095
|
1008 |
0 |
if (!mount_sv || !SvPOK(mount_sv)) |
|
|
0 |
1008 |
if (!mount_sv || !SvPOK(mount_sv)) |
|
1097
|
1008 |
0 |
obj= (struct mph_obj *)SvPV_nolen(mount_sv); |