sereal 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
};
|