| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
#define PERL_NO_GET_CONTEXT |
|
2
|
|
|
|
|
|
|
#include "EXTERN.h" |
|
3
|
|
|
|
|
|
|
#include "perl.h" |
|
4
|
|
|
|
|
|
|
#include "XSUB.h" |
|
5
|
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
#include |
|
7
|
|
|
|
|
|
|
#include |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
#include "buffer.h" |
|
10
|
|
|
|
|
|
|
|
|
11
|
2140
|
|
|
|
|
|
void buf_init(pTHX_ Buffer *b) { |
|
12
|
2140
|
|
|
|
|
|
b->sv = sv_2mortal(newSVpvn("", 0)); |
|
13
|
2140
|
50
|
|
|
|
|
SvGROW(b->sv, 256); |
|
|
|
50
|
|
|
|
|
|
|
14
|
2140
|
|
|
|
|
|
b->ptr = SvPVX(b->sv); |
|
15
|
2140
|
|
|
|
|
|
b->len = 0; |
|
16
|
2140
|
|
|
|
|
|
b->cap = SvLEN(b->sv) - 1; |
|
17
|
2140
|
|
|
|
|
|
} |
|
18
|
|
|
|
|
|
|
|
|
19
|
1682963
|
|
|
|
|
|
void buf_grow(pTHX_ Buffer *b, STRLEN need) { |
|
20
|
1682963
|
100
|
|
|
|
|
if (b->len + need > b->cap) { |
|
21
|
2174
|
50
|
|
|
|
|
STRLEN newcap = b->cap ? b->cap : 256; |
|
22
|
4423
|
100
|
|
|
|
|
while (b->len + need > newcap) newcap *= 2; |
|
23
|
2174
|
50
|
|
|
|
|
SvGROW(b->sv, newcap + 1); |
|
|
|
50
|
|
|
|
|
|
|
24
|
2174
|
|
|
|
|
|
b->ptr = SvPVX(b->sv); |
|
25
|
2174
|
|
|
|
|
|
b->cap = SvLEN(b->sv) - 1; |
|
26
|
|
|
|
|
|
|
} |
|
27
|
1682963
|
|
|
|
|
|
} |
|
28
|
|
|
|
|
|
|
|
|
29
|
509800
|
|
|
|
|
|
void buf_append(pTHX_ Buffer *b, const char *data, STRLEN len) { |
|
30
|
509800
|
|
|
|
|
|
buf_grow(aTHX_ b, len); |
|
31
|
509800
|
|
|
|
|
|
memcpy(b->ptr + b->len, data, len); |
|
32
|
509800
|
|
|
|
|
|
b->len += len; |
|
33
|
509800
|
|
|
|
|
|
} |
|
34
|
|
|
|
|
|
|
|
|
35
|
77521
|
|
|
|
|
|
void buf_byte(pTHX_ Buffer *b, uint8_t v) { |
|
36
|
77521
|
|
|
|
|
|
buf_grow(aTHX_ b, 1); |
|
37
|
77521
|
|
|
|
|
|
b->ptr[b->len++] = (char)v; |
|
38
|
77521
|
|
|
|
|
|
} |
|
39
|
|
|
|
|
|
|
|
|
40
|
67144
|
|
|
|
|
|
void buf_le16(pTHX_ Buffer *b, uint16_t v) { |
|
41
|
67144
|
|
|
|
|
|
buf_grow(aTHX_ b, 2); |
|
42
|
67144
|
|
|
|
|
|
b->ptr[b->len++] = (char)(v & 0xff); |
|
43
|
67144
|
|
|
|
|
|
b->ptr[b->len++] = (char)((v >> 8) & 0xff); |
|
44
|
67144
|
|
|
|
|
|
} |
|
45
|
|
|
|
|
|
|
|
|
46
|
313971
|
|
|
|
|
|
void buf_le32(pTHX_ Buffer *b, uint32_t v) { |
|
47
|
313971
|
|
|
|
|
|
buf_grow(aTHX_ b, 4); |
|
48
|
313971
|
|
|
|
|
|
b->ptr[b->len++] = (char)(v & 0xff); |
|
49
|
313971
|
|
|
|
|
|
b->ptr[b->len++] = (char)((v >> 8) & 0xff); |
|
50
|
313971
|
|
|
|
|
|
b->ptr[b->len++] = (char)((v >> 16) & 0xff); |
|
51
|
313971
|
|
|
|
|
|
b->ptr[b->len++] = (char)((v >> 24) & 0xff); |
|
52
|
313971
|
|
|
|
|
|
} |
|
53
|
|
|
|
|
|
|
|
|
54
|
194730
|
|
|
|
|
|
void buf_le64(pTHX_ Buffer *b, uint64_t v) { |
|
55
|
|
|
|
|
|
|
int i; |
|
56
|
194730
|
|
|
|
|
|
buf_grow(aTHX_ b, 8); |
|
57
|
1752570
|
100
|
|
|
|
|
for (i = 0; i < 8; i++) b->ptr[b->len++] = (char)((v >> (i * 8)) & 0xff); |
|
58
|
194730
|
|
|
|
|
|
} |
|
59
|
|
|
|
|
|
|
|
|
60
|
15
|
|
|
|
|
|
void buf_lefloat(pTHX_ Buffer *b, float f) { |
|
61
|
|
|
|
|
|
|
uint32_t v; |
|
62
|
15
|
|
|
|
|
|
memcpy(&v, &f, 4); |
|
63
|
15
|
|
|
|
|
|
buf_le32(aTHX_ b, v); |
|
64
|
15
|
|
|
|
|
|
} |
|
65
|
|
|
|
|
|
|
|
|
66
|
43581
|
|
|
|
|
|
void buf_ledouble(pTHX_ Buffer *b, double d) { |
|
67
|
|
|
|
|
|
|
uint64_t v; |
|
68
|
43581
|
|
|
|
|
|
memcpy(&v, &d, 8); |
|
69
|
43581
|
|
|
|
|
|
buf_le64(aTHX_ b, v); |
|
70
|
43581
|
|
|
|
|
|
} |
|
71
|
|
|
|
|
|
|
|
|
72
|
519568
|
|
|
|
|
|
void buf_varint(pTHX_ Buffer *b, UV n) { |
|
73
|
519568
|
|
|
|
|
|
buf_grow(aTHX_ b, 10); |
|
74
|
605859
|
100
|
|
|
|
|
while (n >= 0x80) { |
|
75
|
86291
|
|
|
|
|
|
b->ptr[b->len++] = (char)((n & 0x7f) | 0x80); |
|
76
|
86291
|
|
|
|
|
|
n >>= 7; |
|
77
|
|
|
|
|
|
|
} |
|
78
|
519568
|
|
|
|
|
|
b->ptr[b->len++] = (char)n; |
|
79
|
519568
|
|
|
|
|
|
} |
|
80
|
|
|
|
|
|
|
|
|
81
|
509783
|
|
|
|
|
|
void buf_string(pTHX_ Buffer *b, const char *s, STRLEN len) { |
|
82
|
509783
|
|
|
|
|
|
buf_varint(aTHX_ b, len); |
|
83
|
509783
|
|
|
|
|
|
buf_append(aTHX_ b, s, len); |
|
84
|
509783
|
|
|
|
|
|
} |