sereal 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/sereal/buffer.h +89 -0
- data/ext/sereal/decode.c +238 -0
- data/ext/sereal/decode.h +282 -0
- data/ext/sereal/encode.c +269 -0
- data/ext/sereal/encode.h +1 -0
- data/ext/sereal/extconf.rb +8 -0
- data/ext/sereal/proto.h +73 -0
- data/ext/sereal/sereal.c +12 -0
- data/ext/sereal/sereal.h +73 -0
- data/ext/sereal/snappy/csnappy.h +129 -0
- data/ext/sereal/snappy/csnappy_compress.c +659 -0
- data/ext/sereal/snappy/csnappy_decompress.c +414 -0
- data/ext/sereal/snappy/csnappy_internal.h +147 -0
- data/ext/sereal/snappy/csnappy_internal_userspace.h +301 -0
- metadata +75 -0
data/ext/sereal/buffer.h
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
#include "sereal.h"
|
2
|
+
static inline void *realloc_or_raise(void *p, u32 n) {
|
3
|
+
u8 *buf = realloc(p,n);
|
4
|
+
if (!buf)
|
5
|
+
rb_raise(rb_eNoMemError,"memory allocation failure for %d bytes",n);
|
6
|
+
return buf;
|
7
|
+
}
|
8
|
+
static inline void *alloc_or_raise(u32 s) {
|
9
|
+
return realloc_or_raise(NULL,s);
|
10
|
+
}
|
11
|
+
|
12
|
+
static inline sereal_t * s_create(void) {
|
13
|
+
sereal_t *s = alloc_or_raise(sizeof(*s));
|
14
|
+
ZERO(s,sizeof(*s));
|
15
|
+
return s;
|
16
|
+
}
|
17
|
+
|
18
|
+
static inline void s_destroy(sereal_t *s) {
|
19
|
+
if (s->data)
|
20
|
+
free(s->data);
|
21
|
+
|
22
|
+
free(s);
|
23
|
+
}
|
24
|
+
|
25
|
+
static inline void s_alloc(sereal_t *s, u32 len) {
|
26
|
+
if (s->rsize > s->size + len)
|
27
|
+
return;
|
28
|
+
|
29
|
+
u32 size = s->size + len + 512; // every time allocate 512b more, so we wont alloc for a while
|
30
|
+
u8 *buf = realloc_or_raise(s->data,size);
|
31
|
+
s->data = buf;
|
32
|
+
s->rsize = size;
|
33
|
+
}
|
34
|
+
|
35
|
+
static inline void s_append(sereal_t *s, void *suffix, u32 s_len) {
|
36
|
+
s_alloc(s,s_len);
|
37
|
+
COPY(suffix,(s->data + s->size), s_len);
|
38
|
+
s->size += s_len;
|
39
|
+
s->pos += s_len;
|
40
|
+
}
|
41
|
+
|
42
|
+
static inline void s_append_u8(sereal_t *s,u8 b) {
|
43
|
+
s_append(s,&b,sizeof(b));
|
44
|
+
}
|
45
|
+
|
46
|
+
static inline void s_append_u32(sereal_t *s,u32 b) {
|
47
|
+
s_append(s,&b,sizeof(b));
|
48
|
+
}
|
49
|
+
|
50
|
+
static inline void *s_get_p_at_pos(sereal_t *s, u32 pos,u32 req) {
|
51
|
+
if (pos + req > s->size)
|
52
|
+
rb_raise(rb_eRangeError,"position is out of bounds (%d + %d > %d)",pos,req,s->size);
|
53
|
+
return &s->data[pos];
|
54
|
+
}
|
55
|
+
|
56
|
+
static inline void *s_get_p(sereal_t *s) {
|
57
|
+
return s_get_p_at_pos(s,s->pos,0);
|
58
|
+
}
|
59
|
+
static inline u8 s_get_u8(sereal_t *s) {
|
60
|
+
return *((u8 *) s_get_p(s));
|
61
|
+
}
|
62
|
+
|
63
|
+
static inline u8 s_get_u8_bang(sereal_t *s) {
|
64
|
+
u8 r = s_get_u8(s);
|
65
|
+
s->pos++;
|
66
|
+
return r;
|
67
|
+
}
|
68
|
+
|
69
|
+
static inline u32 s_get_u32_bang(sereal_t *s) {
|
70
|
+
u32 *r = (u32 *) s_get_p_at_pos(s,s->pos,sizeof(u32) - 1); /* current position + 3 bytes */
|
71
|
+
s->pos += sizeof(u32);
|
72
|
+
return *r;
|
73
|
+
}
|
74
|
+
|
75
|
+
static inline u32 s_shift_position_bang(sereal_t *s, u32 len) {
|
76
|
+
s->pos += len;
|
77
|
+
return len;
|
78
|
+
}
|
79
|
+
static inline void s_dump(sereal_t *s) {
|
80
|
+
u32 i;
|
81
|
+
for (i = 0; i < s->size; i++) {
|
82
|
+
if (i == s->pos)
|
83
|
+
fprintf(stderr," [%c %d] ",s->data[i],s->data[i]);
|
84
|
+
else
|
85
|
+
fprintf(stderr," (%c %d) ",s->data[i],s->data[i]);
|
86
|
+
}
|
87
|
+
fprintf(stderr,"\n");
|
88
|
+
}
|
89
|
+
|
data/ext/sereal/decode.c
ADDED
@@ -0,0 +1,238 @@
|
|
1
|
+
#include "sereal.h"
|
2
|
+
#include "buffer.h"
|
3
|
+
#include "decode.h"
|
4
|
+
#include "snappy/csnappy_decompress.c"
|
5
|
+
|
6
|
+
static VALUE s_default_reader(sereal_t *s, u8 tag) {
|
7
|
+
// s_dump(s);
|
8
|
+
rb_raise(rb_eTypeError,"unsupported tag %d",tag);
|
9
|
+
return Qnil;
|
10
|
+
}
|
11
|
+
|
12
|
+
/* VARINT */
|
13
|
+
static u64 s_get_varint_bang(sereal_t *s) {
|
14
|
+
u64 uv = 0;
|
15
|
+
unsigned int lshift = 0;
|
16
|
+
while (s_get_u8(s) & 0x80) {
|
17
|
+
uv |= ((u64)(s_get_u8_bang(s) & 0x7F) << lshift);
|
18
|
+
lshift += 7;
|
19
|
+
if (lshift > (sizeof(uv) * 8))
|
20
|
+
rb_raise(rb_eTypeError, "varint too big");
|
21
|
+
}
|
22
|
+
uv |= ((u64)(s_get_u8_bang(s)) << lshift);
|
23
|
+
return uv;
|
24
|
+
}
|
25
|
+
|
26
|
+
/* ZIGZAG */
|
27
|
+
static VALUE s_read_zigzag(sereal_t *s, u8 tag) {
|
28
|
+
signed long long z = 0;
|
29
|
+
u64 v = s_get_varint_bang(s);
|
30
|
+
if (v & 1) {
|
31
|
+
z = ((long) v >> 1);
|
32
|
+
} else {
|
33
|
+
z = (long) v >> 1;
|
34
|
+
}
|
35
|
+
return LL2NUM(z);
|
36
|
+
}
|
37
|
+
|
38
|
+
/* VARINT */
|
39
|
+
static VALUE s_read_varint(sereal_t *s, u8 tag) {
|
40
|
+
return ULL2NUM(s_get_varint_bang(s));
|
41
|
+
}
|
42
|
+
|
43
|
+
/* FLOAT */
|
44
|
+
static VALUE s_read_float(sereal_t *s, u8 tag) {
|
45
|
+
float *f = (float *) s_get_p_at_pos(s,s->pos,sizeof(*f));
|
46
|
+
return DBL2NUM((double) *f);
|
47
|
+
}
|
48
|
+
|
49
|
+
/* DOUBLE */
|
50
|
+
static VALUE s_read_double(sereal_t *s, u8 tag) {
|
51
|
+
double *d = (double *) s_get_p_at_pos(s,s->pos,sizeof(*d));
|
52
|
+
return DBL2NUM(*d);
|
53
|
+
}
|
54
|
+
|
55
|
+
/* LONG DOUBLE */
|
56
|
+
static VALUE s_read_long_double(sereal_t *s, u8 tag) {
|
57
|
+
long double *d = (long double *) s_get_p_at_pos(s,s->pos,sizeof(*d));
|
58
|
+
return DBL2NUM((double) *d);
|
59
|
+
}
|
60
|
+
|
61
|
+
/* POS */
|
62
|
+
static VALUE s_read_small_positive_int(sereal_t *s, u8 tag) {
|
63
|
+
return INT2FIX(tag);
|
64
|
+
}
|
65
|
+
|
66
|
+
/* NEG */
|
67
|
+
static VALUE s_read_small_negative_int(sereal_t *s, u8 tag) {
|
68
|
+
return INT2FIX(tag - 32);
|
69
|
+
}
|
70
|
+
|
71
|
+
/* ARRAY */
|
72
|
+
static inline VALUE s_read_array_with_len(sereal_t *s, u32 len) {
|
73
|
+
VALUE arr[len];
|
74
|
+
register u32 i;
|
75
|
+
for (i = 0; i < len; i++)
|
76
|
+
arr[i] = sereal_to_rb_object(s);
|
77
|
+
return rb_ary_new4(len,arr);
|
78
|
+
}
|
79
|
+
|
80
|
+
/* ARRAY */
|
81
|
+
static VALUE s_read_array(sereal_t *s,u8 tag) {
|
82
|
+
return s_read_array_with_len(s,s_get_varint_bang(s));
|
83
|
+
}
|
84
|
+
|
85
|
+
/* ARRAY */
|
86
|
+
static VALUE s_read_arrayref(sereal_t *s, u8 tag) {
|
87
|
+
return s_read_array_with_len(s,tag & SRL_MASK_ARRAYREF_COUNT);
|
88
|
+
}
|
89
|
+
|
90
|
+
/* HASH */
|
91
|
+
static inline VALUE s_read_hash_with_len(sereal_t *s, u32 len) {
|
92
|
+
VALUE hash = rb_hash_new();
|
93
|
+
register u32 i;
|
94
|
+
for (i = 0; i < len; i++) {
|
95
|
+
VALUE key = sereal_to_rb_object(s);
|
96
|
+
VALUE value = sereal_to_rb_object(s);
|
97
|
+
rb_hash_aset(hash,key,value);
|
98
|
+
}
|
99
|
+
return hash;
|
100
|
+
}
|
101
|
+
/* HASH */
|
102
|
+
static VALUE s_read_hash(sereal_t *s, u8 tag) {
|
103
|
+
return s_read_hash_with_len(s,s_get_varint_bang(s));
|
104
|
+
}
|
105
|
+
/* HASH */
|
106
|
+
static VALUE s_read_hashref(sereal_t *s, u8 tag) {
|
107
|
+
return s_read_hash_with_len(s,tag & SRL_MASK_HASHREF_COUNT);
|
108
|
+
}
|
109
|
+
static VALUE s_read_rb_string_bang(sereal_t *s,u8 t) {
|
110
|
+
u32 len = 0;
|
111
|
+
VALUE string;
|
112
|
+
#define RETURN_STRING(fx_l,fx_gen) \
|
113
|
+
do { \
|
114
|
+
len = fx_l; \
|
115
|
+
string = fx_gen; \
|
116
|
+
s_shift_position_bang(s,len); \
|
117
|
+
return string; \
|
118
|
+
} while(0);
|
119
|
+
if (t == SRL_HDR_STR_UTF8) {
|
120
|
+
RETURN_STRING(s_get_varint_bang(s),
|
121
|
+
rb_enc_str_new(s_get_p(s),len,
|
122
|
+
rb_utf8_encoding()));
|
123
|
+
} else if (t == SRL_HDR_BINARY || t == SRL_HDR_SYM) {
|
124
|
+
RETURN_STRING(s_get_varint_bang(s),
|
125
|
+
rb_str_new(s_get_p(s),len));
|
126
|
+
} else if (IS_SHORT_BINARY(t)) {
|
127
|
+
RETURN_STRING((t & SRL_MASK_SHORT_BINARY_LEN),
|
128
|
+
rb_str_new(s_get_p(s), len));
|
129
|
+
}
|
130
|
+
#undef RETURN_STRING
|
131
|
+
rb_raise(rb_eTypeError, "undefined string type %d",t);
|
132
|
+
}
|
133
|
+
|
134
|
+
static VALUE s_read_next_rb_string_bang(sereal_t *s) {
|
135
|
+
return s_read_rb_string_bang(s,s_get_u8_bang(s));
|
136
|
+
}
|
137
|
+
|
138
|
+
static VALUE s_read_regexp(sereal_t *s, u8 tag) {
|
139
|
+
VALUE pattern = s_read_next_rb_string_bang(s);
|
140
|
+
VALUE modifiers = s_read_next_rb_string_bang(s);
|
141
|
+
|
142
|
+
u32 flags = 0;
|
143
|
+
if (strchr(RSTRING_PTR(modifiers),'i'))
|
144
|
+
flags |= IGNORECASE;
|
145
|
+
|
146
|
+
if (strchr(RSTRING_PTR(modifiers),'m'))
|
147
|
+
flags |= MULTILINE;
|
148
|
+
|
149
|
+
if (strchr(RSTRING_PTR(modifiers),'x'))
|
150
|
+
flags |= EXTENDED;
|
151
|
+
#ifdef RUBINIUS
|
152
|
+
return rb_reg_new(RSTRING_PTR(pattern),RSTRING_LEN(pattern),flags);
|
153
|
+
#else
|
154
|
+
return rb_reg_new_str(pattern,flags);
|
155
|
+
#endif
|
156
|
+
}
|
157
|
+
|
158
|
+
static VALUE s_read_nil(sereal_t *s, u8 tag) {
|
159
|
+
return Qnil;
|
160
|
+
}
|
161
|
+
|
162
|
+
static VALUE s_read_true(sereal_t *s, u8 tag) {
|
163
|
+
return Qtrue;
|
164
|
+
}
|
165
|
+
|
166
|
+
static VALUE s_read_false(sereal_t *s, u8 tag) {
|
167
|
+
return Qfalse;
|
168
|
+
}
|
169
|
+
|
170
|
+
static VALUE s_read_pad(sereal_t *s, u8 tag) {
|
171
|
+
/* just skip this byte and go forward */
|
172
|
+
return sereal_to_rb_object(s);
|
173
|
+
}
|
174
|
+
static VALUE s_read_extend(sereal_t *s, u8 tag) {
|
175
|
+
rb_raise(rb_eArgError,"extend tags are not supported");
|
176
|
+
}
|
177
|
+
|
178
|
+
VALUE sereal_to_rb_object(sereal_t *s) {
|
179
|
+
u8 t;
|
180
|
+
S_RECURSE_INC(s);
|
181
|
+
while (s->pos < s->size) {
|
182
|
+
t = s_get_u8_bang(s);
|
183
|
+
if (t & SRL_HDR_TRACK_FLAG)
|
184
|
+
rb_raise(rb_eArgError, "trackable objects are not supported");
|
185
|
+
S_RECURSE_DEC(s);
|
186
|
+
return (*READERS[t])(s,t);
|
187
|
+
}
|
188
|
+
return Qnil;
|
189
|
+
}
|
190
|
+
|
191
|
+
VALUE method_sereal_decode(VALUE self, VALUE args) {
|
192
|
+
u32 argc = RARRAY_LEN(args);
|
193
|
+
if (argc < 1)
|
194
|
+
rb_raise(rb_eArgError,"need at least 1 argument (object)");
|
195
|
+
VALUE payload = rb_ary_shift(args);
|
196
|
+
VALUE safe = Qtrue;
|
197
|
+
if (TYPE(payload) != T_STRING)
|
198
|
+
rb_raise(rb_eTypeError,"can not decode objects of type %s",rb_obj_classname(payload));
|
199
|
+
|
200
|
+
sereal_t *s = s_create();
|
201
|
+
s->data = RSTRING_PTR(payload);
|
202
|
+
s->size = RSTRING_LEN(payload);
|
203
|
+
|
204
|
+
if (s->size < 6 || s_get_u32_bang(s) != 0x6c72733d)
|
205
|
+
rb_raise(rb_eTypeError,"invalid header");
|
206
|
+
|
207
|
+
u8 version = s_get_u8_bang(s);
|
208
|
+
u8 suffix = s_get_varint_bang(s);
|
209
|
+
int is_compressed = (version & SRL_PROTOCOL_ENCODING_MASK) == SRL_PROTOCOL_ENCODING_SNAPPY ? TRUE : FALSE;
|
210
|
+
|
211
|
+
if (is_compressed) {
|
212
|
+
u32 uncompressed_len;
|
213
|
+
int snappy_header_len = csnappy_get_uncompressed_length(s_get_p(s),
|
214
|
+
(s->size - s->pos),
|
215
|
+
&uncompressed_len);
|
216
|
+
if (snappy_header_len == CSNAPPY_E_HEADER_BAD)
|
217
|
+
rb_raise(rb_eTypeError,"invalid snappy header");
|
218
|
+
|
219
|
+
u8 *uncompressed = alloc_or_raise(uncompressed_len);
|
220
|
+
int done = csnappy_decompress(s_get_p(s),
|
221
|
+
(s->size - s->pos),
|
222
|
+
uncompressed,
|
223
|
+
uncompressed_len);
|
224
|
+
if (done)
|
225
|
+
rb_raise(rb_eTypeError, "snappy decompression failed error: %d",done);
|
226
|
+
s->data = uncompressed;
|
227
|
+
s->size = uncompressed_len;
|
228
|
+
s->pos = 0;
|
229
|
+
}
|
230
|
+
|
231
|
+
VALUE result = sereal_to_rb_object(s);
|
232
|
+
if (is_compressed)
|
233
|
+
s_destroy(s);
|
234
|
+
else
|
235
|
+
free(s); // we do not destroy because it will free s->data which is RSTRING_PTR(payload)
|
236
|
+
return result;
|
237
|
+
}
|
238
|
+
|
data/ext/sereal/decode.h
ADDED
@@ -0,0 +1,282 @@
|
|
1
|
+
VALUE sereal_to_rb_object(sereal_t *s);
|
2
|
+
static VALUE s_default_reader(sereal_t *s, u8 tag);
|
3
|
+
static VALUE s_read_zigzag(sereal_t *s, u8 tag);
|
4
|
+
static VALUE s_read_varint(sereal_t *s, u8 tag);
|
5
|
+
static VALUE s_read_float(sereal_t *s, u8 tag);
|
6
|
+
static VALUE s_read_double(sereal_t *s, u8 tag);
|
7
|
+
static VALUE s_read_long_double(sereal_t *s, u8 tag);
|
8
|
+
static VALUE s_read_small_positive_int(sereal_t *s, u8 tag);
|
9
|
+
static VALUE s_read_small_negative_int(sereal_t *s, u8 tag);
|
10
|
+
static VALUE s_read_array(sereal_t *s,u8 tag);
|
11
|
+
static VALUE s_read_arrayref(sereal_t *s, u8 tag);
|
12
|
+
static VALUE s_read_hash(sereal_t *s, u8 tag);
|
13
|
+
static VALUE s_read_hashref(sereal_t *s, u8 tag);
|
14
|
+
static VALUE s_read_rb_string_bang(sereal_t *s,u8 t);
|
15
|
+
static VALUE s_read_next_rb_string_bang(sereal_t *s);
|
16
|
+
static VALUE s_read_object(sereal_t *s,u8 tag);
|
17
|
+
static VALUE s_read_regexp(sereal_t *s, u8 tag);
|
18
|
+
static VALUE s_read_sym(sereal_t *s,u8 tag);
|
19
|
+
static VALUE s_read_nil(sereal_t *s, u8 tag);
|
20
|
+
static VALUE s_read_true(sereal_t *s, u8 tag);
|
21
|
+
static VALUE s_read_false(sereal_t *s, u8 tag);
|
22
|
+
static VALUE s_read_pad(sereal_t *s, u8 tag);
|
23
|
+
static VALUE s_read_extend(sereal_t *s, u8 tag);
|
24
|
+
|
25
|
+
static VALUE (*READERS[256])(sereal_t *, u8) = {
|
26
|
+
s_read_small_positive_int, // 0 SRL_HDR_POS_LOW
|
27
|
+
s_read_small_positive_int, // 1
|
28
|
+
s_read_small_positive_int, // 2
|
29
|
+
s_read_small_positive_int, // 3
|
30
|
+
s_read_small_positive_int, // 4
|
31
|
+
s_read_small_positive_int, // 5
|
32
|
+
s_read_small_positive_int, // 6
|
33
|
+
s_read_small_positive_int, // 7
|
34
|
+
s_read_small_positive_int, // 8
|
35
|
+
s_read_small_positive_int, // 9
|
36
|
+
s_read_small_positive_int, // 10
|
37
|
+
s_read_small_positive_int, // 11
|
38
|
+
s_read_small_positive_int, // 12
|
39
|
+
s_read_small_positive_int, // 13
|
40
|
+
s_read_small_positive_int, // 14
|
41
|
+
s_read_small_positive_int, // 15 SRL_HDR_POS_HIGH
|
42
|
+
s_read_small_negative_int, // 16 SRL_HDR_NEG_LOW
|
43
|
+
s_read_small_negative_int, // 17
|
44
|
+
s_read_small_negative_int, // 18
|
45
|
+
s_read_small_negative_int, // 19
|
46
|
+
s_read_small_negative_int, // 20
|
47
|
+
s_read_small_negative_int, // 21
|
48
|
+
s_read_small_negative_int, // 22
|
49
|
+
s_read_small_negative_int, // 23
|
50
|
+
s_read_small_negative_int, // 24
|
51
|
+
s_read_small_negative_int, // 25
|
52
|
+
s_read_small_negative_int, // 26
|
53
|
+
s_read_small_negative_int, // 27
|
54
|
+
s_read_small_negative_int, // 28
|
55
|
+
s_read_small_negative_int, // 29
|
56
|
+
s_read_small_negative_int, // 30
|
57
|
+
s_read_small_negative_int, // 31 SRL_HDR_NEG_HIGH
|
58
|
+
s_read_varint, // 32 SRL_HDR_VARINT
|
59
|
+
s_read_zigzag, // 33 SRL_HDR_ZIGZAG
|
60
|
+
s_read_float, // 34 SRL_HDR_FLOAT
|
61
|
+
s_read_double, // 35 SRL_HDR_DOUBLE
|
62
|
+
s_read_long_double, // 36 SRL_HDR_LONG_DOUBLE
|
63
|
+
s_read_nil, // 37 SRL_HDR_UNDEF
|
64
|
+
s_read_rb_string_bang, // 38 SRL_HDR_BINARY
|
65
|
+
s_read_rb_string_bang, // 39 SRL_HDR_STR_UTF8
|
66
|
+
s_default_reader, /* XXX */ // 40 SRL_HDR_REFN
|
67
|
+
s_default_reader, /* XXX */ // 41 SRL_HDR_REFP
|
68
|
+
s_read_hash, // 42 SRL_HDR_HASH
|
69
|
+
s_read_array, // 43 SRL_HDR_ARRAY
|
70
|
+
s_default_reader, /* XXX */ // 44 SRL_HDR_OBJECT
|
71
|
+
s_default_reader, /* XXX */ // 45 SRL_HDR_OBJECTV
|
72
|
+
s_default_reader, /* XXX */ // 46 SRL_HDR_ALIAS
|
73
|
+
s_default_reader, /* XXX */ // 47 SRL_HDR_COPY
|
74
|
+
s_default_reader, /* XXX */ // 48 SRL_HDR_WEAKEN
|
75
|
+
s_read_regexp, // 49 SRL_HDR_REGEXP
|
76
|
+
s_default_reader, /* XXX */ // 50 SRL_HDR_RESERVED_LOW
|
77
|
+
s_default_reader, /* XXX */ // 51
|
78
|
+
s_default_reader, /* XXX */ // 52
|
79
|
+
s_default_reader, /* XXX */ // 53
|
80
|
+
s_default_reader, /* XXX */ // 54
|
81
|
+
s_default_reader, /* XXX */ // 55
|
82
|
+
s_default_reader, /* XXX */ // 56
|
83
|
+
s_default_reader, /* XXX */ // 57 SRL_HDR_RESERVED_HIGH
|
84
|
+
s_read_false, // 58 SRL_HDR_FALSE
|
85
|
+
s_read_true, // 59 SRL_HDR_TRUE
|
86
|
+
s_default_reader, /* XXX */ // 60 SRL_HDR_MANY
|
87
|
+
s_default_reader, /* XXX */ // 61 SRL_HDR_PACKET_START
|
88
|
+
s_read_extend, // 62 SRL_HDR_EXTEND
|
89
|
+
s_read_pad, // 63 SRL_HDR_PAD
|
90
|
+
s_read_arrayref, // 64 SRL_HDR_ARRAYREF_LOW
|
91
|
+
s_read_arrayref, // 65
|
92
|
+
s_read_arrayref, // 66
|
93
|
+
s_read_arrayref, // 67
|
94
|
+
s_read_arrayref, // 68
|
95
|
+
s_read_arrayref, // 69
|
96
|
+
s_read_arrayref, // 70
|
97
|
+
s_read_arrayref, // 71
|
98
|
+
s_read_arrayref, // 72
|
99
|
+
s_read_arrayref, // 73
|
100
|
+
s_read_arrayref, // 74
|
101
|
+
s_read_arrayref, // 75
|
102
|
+
s_read_arrayref, // 76
|
103
|
+
s_read_arrayref, // 77
|
104
|
+
s_read_arrayref, // 78
|
105
|
+
s_read_arrayref, // 79 SRL_HDR_ARRAYREF_HIGH
|
106
|
+
s_read_hashref, // 80 SRL_HDR_HASHREF_LOW
|
107
|
+
s_read_hashref, // 81
|
108
|
+
s_read_hashref, // 82
|
109
|
+
s_read_hashref, // 83
|
110
|
+
s_read_hashref, // 84
|
111
|
+
s_read_hashref, // 85
|
112
|
+
s_read_hashref, // 86
|
113
|
+
s_read_hashref, // 87
|
114
|
+
s_read_hashref, // 88
|
115
|
+
s_read_hashref, // 89
|
116
|
+
s_read_hashref, // 90
|
117
|
+
s_read_hashref, // 91
|
118
|
+
s_read_hashref, // 92
|
119
|
+
s_read_hashref, // 93
|
120
|
+
s_read_hashref, // 94
|
121
|
+
s_read_hashref, // 95 SRL_HDR_HASHREF_HIGH
|
122
|
+
s_read_rb_string_bang, // 96 SRL_HDR_SHORT_BINARY_LOW
|
123
|
+
s_read_rb_string_bang, // 97
|
124
|
+
s_read_rb_string_bang, // 98
|
125
|
+
s_read_rb_string_bang, // 99
|
126
|
+
s_read_rb_string_bang, // 100
|
127
|
+
s_read_rb_string_bang, // 101
|
128
|
+
s_read_rb_string_bang, // 102
|
129
|
+
s_read_rb_string_bang, // 103
|
130
|
+
s_read_rb_string_bang, // 104
|
131
|
+
s_read_rb_string_bang, // 105
|
132
|
+
s_read_rb_string_bang, // 106
|
133
|
+
s_read_rb_string_bang, // 107
|
134
|
+
s_read_rb_string_bang, // 108
|
135
|
+
s_read_rb_string_bang, // 109
|
136
|
+
s_read_rb_string_bang, // 110
|
137
|
+
s_read_rb_string_bang, // 111
|
138
|
+
s_read_rb_string_bang, // 112
|
139
|
+
s_read_rb_string_bang, // 113
|
140
|
+
s_read_rb_string_bang, // 114
|
141
|
+
s_read_rb_string_bang, // 115
|
142
|
+
s_read_rb_string_bang, // 116
|
143
|
+
s_read_rb_string_bang, // 117
|
144
|
+
s_read_rb_string_bang, // 118
|
145
|
+
s_read_rb_string_bang, // 119
|
146
|
+
s_read_rb_string_bang, // 120
|
147
|
+
s_read_rb_string_bang, // 121
|
148
|
+
s_read_rb_string_bang, // 122
|
149
|
+
s_read_rb_string_bang, // 123
|
150
|
+
s_read_rb_string_bang, // 124
|
151
|
+
s_read_rb_string_bang, // 125
|
152
|
+
s_read_rb_string_bang, // 126
|
153
|
+
s_read_rb_string_bang, // 127
|
154
|
+
s_default_reader, /* XXX */ // 128 SRL_HDR_TRACK_FLAG
|
155
|
+
s_default_reader, /* XXX */ // 129
|
156
|
+
s_default_reader, /* XXX */ // 130
|
157
|
+
s_default_reader, /* XXX */ // 131
|
158
|
+
s_default_reader, /* XXX */ // 132
|
159
|
+
s_default_reader, /* XXX */ // 133
|
160
|
+
s_default_reader, /* XXX */ // 134
|
161
|
+
s_default_reader, /* XXX */ // 135
|
162
|
+
s_default_reader, /* XXX */ // 136
|
163
|
+
s_default_reader, /* XXX */ // 137
|
164
|
+
s_default_reader, /* XXX */ // 138
|
165
|
+
s_default_reader, /* XXX */ // 139
|
166
|
+
s_default_reader, /* XXX */ // 140
|
167
|
+
s_default_reader, /* XXX */ // 141
|
168
|
+
s_default_reader, /* XXX */ // 142
|
169
|
+
s_default_reader, /* XXX */ // 143
|
170
|
+
s_default_reader, /* XXX */ // 144
|
171
|
+
s_default_reader, /* XXX */ // 145
|
172
|
+
s_default_reader, /* XXX */ // 146
|
173
|
+
s_default_reader, /* XXX */ // 147
|
174
|
+
s_default_reader, /* XXX */ // 148
|
175
|
+
s_default_reader, /* XXX */ // 149
|
176
|
+
s_default_reader, /* XXX */ // 150
|
177
|
+
s_default_reader, /* XXX */ // 151
|
178
|
+
s_default_reader, /* XXX */ // 152
|
179
|
+
s_default_reader, /* XXX */ // 153
|
180
|
+
s_default_reader, /* XXX */ // 154
|
181
|
+
s_default_reader, /* XXX */ // 155
|
182
|
+
s_default_reader, /* XXX */ // 156
|
183
|
+
s_default_reader, /* XXX */ // 157
|
184
|
+
s_default_reader, /* XXX */ // 158
|
185
|
+
s_default_reader, /* XXX */ // 159
|
186
|
+
s_default_reader, /* XXX */ // 160
|
187
|
+
s_default_reader, /* XXX */ // 161
|
188
|
+
s_default_reader, /* XXX */ // 162
|
189
|
+
s_default_reader, /* XXX */ // 163
|
190
|
+
s_default_reader, /* XXX */ // 164
|
191
|
+
s_default_reader, /* XXX */ // 165
|
192
|
+
s_default_reader, /* XXX */ // 166
|
193
|
+
s_default_reader, /* XXX */ // 167
|
194
|
+
s_default_reader, /* XXX */ // 168
|
195
|
+
s_default_reader, /* XXX */ // 169
|
196
|
+
s_default_reader, /* XXX */ // 170
|
197
|
+
s_default_reader, /* XXX */ // 171
|
198
|
+
s_default_reader, /* XXX */ // 172
|
199
|
+
s_default_reader, /* XXX */ // 173
|
200
|
+
s_default_reader, /* XXX */ // 174
|
201
|
+
s_default_reader, /* XXX */ // 175
|
202
|
+
s_default_reader, /* XXX */ // 176
|
203
|
+
s_default_reader, /* XXX */ // 177
|
204
|
+
s_default_reader, /* XXX */ // 178
|
205
|
+
s_default_reader, /* XXX */ // 179
|
206
|
+
s_default_reader, /* XXX */ // 180
|
207
|
+
s_default_reader, /* XXX */ // 181
|
208
|
+
s_default_reader, /* XXX */ // 182
|
209
|
+
s_default_reader, /* XXX */ // 183
|
210
|
+
s_default_reader, /* XXX */ // 184
|
211
|
+
s_default_reader, /* XXX */ // 185
|
212
|
+
s_default_reader, /* XXX */ // 186
|
213
|
+
s_default_reader, /* XXX */ // 187
|
214
|
+
s_default_reader, /* XXX */ // 188
|
215
|
+
s_default_reader, /* XXX */ // 189
|
216
|
+
s_default_reader, /* XXX */ // 190
|
217
|
+
s_default_reader, /* XXX */ // 191
|
218
|
+
s_default_reader, /* XXX */ // 192
|
219
|
+
s_default_reader, /* XXX */ // 193
|
220
|
+
s_default_reader, /* XXX */ // 194
|
221
|
+
s_default_reader, /* XXX */ // 195
|
222
|
+
s_default_reader, /* XXX */ // 196
|
223
|
+
s_default_reader, /* XXX */ // 197
|
224
|
+
s_default_reader, /* XXX */ // 198
|
225
|
+
s_default_reader, /* XXX */ // 199
|
226
|
+
s_default_reader, /* XXX */ // 200
|
227
|
+
s_default_reader, /* XXX */ // 201
|
228
|
+
s_default_reader, /* XXX */ // 202
|
229
|
+
s_default_reader, /* XXX */ // 203
|
230
|
+
s_default_reader, /* XXX */ // 204
|
231
|
+
s_default_reader, /* XXX */ // 205
|
232
|
+
s_default_reader, /* XXX */ // 206
|
233
|
+
s_default_reader, /* XXX */ // 207
|
234
|
+
s_default_reader, /* XXX */ // 208
|
235
|
+
s_default_reader, /* XXX */ // 209
|
236
|
+
s_default_reader, /* XXX */ // 210
|
237
|
+
s_default_reader, /* XXX */ // 211
|
238
|
+
s_default_reader, /* XXX */ // 212
|
239
|
+
s_default_reader, /* XXX */ // 213
|
240
|
+
s_default_reader, /* XXX */ // 214
|
241
|
+
s_default_reader, /* XXX */ // 215
|
242
|
+
s_default_reader, /* XXX */ // 216
|
243
|
+
s_default_reader, /* XXX */ // 217
|
244
|
+
s_default_reader, /* XXX */ // 218
|
245
|
+
s_default_reader, /* XXX */ // 219
|
246
|
+
s_default_reader, /* XXX */ // 220
|
247
|
+
s_default_reader, /* XXX */ // 221
|
248
|
+
s_default_reader, /* XXX */ // 222
|
249
|
+
s_default_reader, /* XXX */ // 223
|
250
|
+
s_default_reader, /* XXX */ // 224
|
251
|
+
s_default_reader, /* XXX */ // 225
|
252
|
+
s_default_reader, /* XXX */ // 226
|
253
|
+
s_default_reader, /* XXX */ // 227
|
254
|
+
s_default_reader, /* XXX */ // 228
|
255
|
+
s_default_reader, /* XXX */ // 229
|
256
|
+
s_default_reader, /* XXX */ // 230
|
257
|
+
s_default_reader, /* XXX */ // 231
|
258
|
+
s_default_reader, /* XXX */ // 232
|
259
|
+
s_default_reader, /* XXX */ // 233
|
260
|
+
s_default_reader, /* XXX */ // 234
|
261
|
+
s_default_reader, /* XXX */ // 235
|
262
|
+
s_default_reader, /* XXX */ // 236
|
263
|
+
s_default_reader, /* XXX */ // 237
|
264
|
+
s_default_reader, /* XXX */ // 238
|
265
|
+
s_default_reader, /* XXX */ // 239
|
266
|
+
s_default_reader, /* XXX */ // 240
|
267
|
+
s_default_reader, /* XXX */ // 241
|
268
|
+
s_default_reader, /* XXX */ // 242
|
269
|
+
s_default_reader, /* XXX */ // 243
|
270
|
+
s_default_reader, /* XXX */ // 244
|
271
|
+
s_default_reader, /* XXX */ // 245
|
272
|
+
s_default_reader, /* XXX */ // 246
|
273
|
+
s_default_reader, /* XXX */ // 247
|
274
|
+
s_default_reader, /* XXX */ // 248
|
275
|
+
s_default_reader, /* XXX */ // 249
|
276
|
+
s_default_reader, /* XXX */ // 250
|
277
|
+
s_default_reader, /* XXX */ // 251
|
278
|
+
s_default_reader, /* XXX */ // 252
|
279
|
+
s_default_reader, /* XXX */ // 253
|
280
|
+
s_default_reader, /* XXX */ // 254
|
281
|
+
s_default_reader /* XXX */ // 255
|
282
|
+
};
|