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.
@@ -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
+
@@ -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
+
@@ -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
+ };