bin_utils 0.0.1
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/bin_utils/extconf.rb +8 -0
- data/ext/bin_utils/native.c +1928 -0
- data/lib/bin_utils/pure_ruby.rb +684 -0
- data/lib/bin_utils/version.rb +3 -0
- data/lib/bin_utils.rb +14 -0
- data/test/test_bin_utils.rb +556 -0
- metadata +57 -0
|
@@ -0,0 +1,1928 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
|
|
3
|
+
#if HAVE_STDINT_H
|
|
4
|
+
#include "stdint.h"
|
|
5
|
+
#elif defined(_MSC_VER)
|
|
6
|
+
typedef __int8 int8_t;
|
|
7
|
+
typedef unsigned __int8 uint8_t;
|
|
8
|
+
typedef __int16 int16_t;
|
|
9
|
+
typedef unsigned __int16 uint16_t;
|
|
10
|
+
typedef __int32 int32_t;
|
|
11
|
+
typedef unsigned __int32 uint32_t;
|
|
12
|
+
typedef __int64 int64_t;
|
|
13
|
+
typedef unsigned __int64 uint64_t;
|
|
14
|
+
#else
|
|
15
|
+
typedef char int8_t;
|
|
16
|
+
typedef unsigned char uint8_t;
|
|
17
|
+
typedef short int16_t;
|
|
18
|
+
typedef unsigned short uint16_t;
|
|
19
|
+
typedef int int32_t;
|
|
20
|
+
typedef unsigned int uint32_t;
|
|
21
|
+
#if SIZEOF_LONG==8
|
|
22
|
+
typedef long int64_t;
|
|
23
|
+
typedef unsigned long uint64_t;
|
|
24
|
+
#else
|
|
25
|
+
typedef long long int64_t;
|
|
26
|
+
typedef unsigned long long uint64_t;
|
|
27
|
+
#endif
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#ifdef __GNUC__
|
|
31
|
+
#define FORCE_INLINE __attribute__((always_inline))
|
|
32
|
+
#elif defined(_MSC_VER)
|
|
33
|
+
#define FORCE_INLINE __forceinline
|
|
34
|
+
#else
|
|
35
|
+
#define FORCE_INLINE
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
#if defined(_MSC_VER)
|
|
39
|
+
#define LL(x) (x)
|
|
40
|
+
#define LLU(x) (x)
|
|
41
|
+
#else
|
|
42
|
+
#define LL(x) (x##LL)
|
|
43
|
+
#define LLU(x) (x##LLU)
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
#if SIZEOF_LONG == 8
|
|
47
|
+
#define I642NUM(v) LONG2NUM(v)
|
|
48
|
+
#define U642NUM(v) ULONG2NUM(v)
|
|
49
|
+
#define NUM2I64(v) NUM2LONG(v)
|
|
50
|
+
#define NUM2U64(v) NUM2ULONG(v)
|
|
51
|
+
#else
|
|
52
|
+
#define I642NUM(v) LL2NUM(v)
|
|
53
|
+
#define U642NUM(v) ULL2NUM(v)
|
|
54
|
+
#define NUM2I64(v) NUM2LL(v)
|
|
55
|
+
#define NUM2U64(v) NUM2ULL(v)
|
|
56
|
+
#endif
|
|
57
|
+
|
|
58
|
+
ID rshft;
|
|
59
|
+
ID band;
|
|
60
|
+
|
|
61
|
+
static long
|
|
62
|
+
check_size(long i, long strlen, long ilen)
|
|
63
|
+
{
|
|
64
|
+
if (i < 0) { i += strlen; }
|
|
65
|
+
if (i > strlen - ilen || i < 0) {
|
|
66
|
+
rb_raise(rb_eArgError, "index %ld be in range 0..%ld or in range -%ld..-%ld for string of size %ld", i, strlen-ilen, strlen, -ilen, strlen);
|
|
67
|
+
}
|
|
68
|
+
return i;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
static int32_t
|
|
72
|
+
get_int8(VALUE rstr, VALUE ri)
|
|
73
|
+
{
|
|
74
|
+
long i = NUM2LONG(ri);
|
|
75
|
+
StringValue(rstr);
|
|
76
|
+
i = check_size(i, RSTRING_LEN(rstr), 1);
|
|
77
|
+
return (uint8_t)(RSTRING_PTR(rstr)[i]);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static int32_t
|
|
81
|
+
get_sint8(VALUE rstr, VALUE ri)
|
|
82
|
+
{
|
|
83
|
+
long i = NUM2LONG(ri);
|
|
84
|
+
StringValue(rstr);
|
|
85
|
+
i = check_size(i, RSTRING_LEN(rstr), 1);
|
|
86
|
+
return (int8_t)(RSTRING_PTR(rstr)[i]);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
static int32_t
|
|
90
|
+
get_int16_le(VALUE rstr, VALUE ri)
|
|
91
|
+
{
|
|
92
|
+
long i = NUM2LONG(ri);
|
|
93
|
+
const uint8_t *ptr;
|
|
94
|
+
uint32_t byte0, byte1;
|
|
95
|
+
int32_t res;
|
|
96
|
+
StringValue(rstr);
|
|
97
|
+
i = check_size(i, RSTRING_LEN(rstr), 2);
|
|
98
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
99
|
+
byte0 = ptr[i];
|
|
100
|
+
byte1 = ptr[i+1];
|
|
101
|
+
return byte0 + (byte1 << 8);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
static int32_t
|
|
105
|
+
get_sint16_le(VALUE rstr, VALUE ri)
|
|
106
|
+
{
|
|
107
|
+
int32_t res = get_int16_le(rstr, ri);
|
|
108
|
+
return res - ((res >> 15)<<16);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
static int32_t
|
|
112
|
+
get_int16_be(VALUE rstr, VALUE ri)
|
|
113
|
+
{
|
|
114
|
+
long i = NUM2LONG(ri);
|
|
115
|
+
const uint8_t *ptr;
|
|
116
|
+
uint32_t byte0, byte1;
|
|
117
|
+
StringValue(rstr);
|
|
118
|
+
i = check_size(i, RSTRING_LEN(rstr), 2);
|
|
119
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
120
|
+
byte0 = ptr[i+1];
|
|
121
|
+
byte1 = ptr[i];
|
|
122
|
+
return byte0 + (byte1 << 8);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
static int32_t
|
|
126
|
+
get_sint16_be(VALUE rstr, VALUE ri)
|
|
127
|
+
{
|
|
128
|
+
int32_t res = get_int16_be(rstr, ri);
|
|
129
|
+
return res - ((res >> 15) << 16);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
static int32_t
|
|
133
|
+
get_int24_le(VALUE rstr, VALUE ri)
|
|
134
|
+
{
|
|
135
|
+
long i = NUM2LONG(ri);
|
|
136
|
+
const uint8_t *ptr;
|
|
137
|
+
uint32_t byte0, byte1, byte2;
|
|
138
|
+
StringValue(rstr);
|
|
139
|
+
i = check_size(i, RSTRING_LEN(rstr), 3);
|
|
140
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
141
|
+
byte0 = ptr[i];
|
|
142
|
+
byte1 = ptr[i+1];
|
|
143
|
+
byte2 = ptr[i+2];
|
|
144
|
+
return byte0 + (byte1 << 8) + (byte2 << 16);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
static int32_t
|
|
148
|
+
get_sint24_le(VALUE rstr, VALUE ri)
|
|
149
|
+
{
|
|
150
|
+
int32_t res = get_int24_le(rstr, ri);
|
|
151
|
+
return res - ((res >> 23) << 24);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
static int32_t
|
|
155
|
+
get_int24_be(VALUE rstr, VALUE ri)
|
|
156
|
+
{
|
|
157
|
+
long i = NUM2LONG(ri);
|
|
158
|
+
const uint8_t *ptr;
|
|
159
|
+
uint32_t byte0, byte1, byte2;
|
|
160
|
+
StringValue(rstr);
|
|
161
|
+
i = check_size(i, RSTRING_LEN(rstr), 3);
|
|
162
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
163
|
+
byte0 = ptr[i+2];
|
|
164
|
+
byte1 = ptr[i+1];
|
|
165
|
+
byte2 = ptr[i];
|
|
166
|
+
return byte0 + (byte1 << 8) + (byte2 << 16);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
static int32_t
|
|
170
|
+
get_sint24_be(VALUE rstr, VALUE ri)
|
|
171
|
+
{
|
|
172
|
+
int32_t res = get_int24_be(rstr, ri);
|
|
173
|
+
return res - ((res >> 23) << 24);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
static uint32_t
|
|
177
|
+
get_int32_le(VALUE rstr, VALUE ri)
|
|
178
|
+
{
|
|
179
|
+
long i = NUM2LONG(ri);
|
|
180
|
+
const uint8_t *ptr;
|
|
181
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
182
|
+
StringValue(rstr);
|
|
183
|
+
i = check_size(i, RSTRING_LEN(rstr), 4);
|
|
184
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
185
|
+
|
|
186
|
+
byte0 = ptr[i];
|
|
187
|
+
byte1 = ptr[i+1];
|
|
188
|
+
byte2 = ptr[i+2];
|
|
189
|
+
byte3 = ptr[i+3];
|
|
190
|
+
return byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
static int32_t
|
|
194
|
+
get_sint32_le(VALUE rstr, VALUE ri)
|
|
195
|
+
{
|
|
196
|
+
return (int32_t)get_int32_le(rstr, ri);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
static uint32_t
|
|
200
|
+
get_int32_be(VALUE rstr, VALUE ri)
|
|
201
|
+
{
|
|
202
|
+
long i = NUM2LONG(ri);
|
|
203
|
+
const uint8_t *ptr;
|
|
204
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
205
|
+
StringValue(rstr);
|
|
206
|
+
i = check_size(i, RSTRING_LEN(rstr), 4);
|
|
207
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
208
|
+
byte0 = ptr[i+3];
|
|
209
|
+
byte1 = ptr[i+2];
|
|
210
|
+
byte2 = ptr[i+1];
|
|
211
|
+
byte3 = ptr[i+0];
|
|
212
|
+
return byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
static int32_t
|
|
216
|
+
get_sint32_be(VALUE rstr, VALUE ri)
|
|
217
|
+
{
|
|
218
|
+
return (int32_t)get_int32_be(rstr, ri);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
static int64_t
|
|
222
|
+
get_int40_le(VALUE rstr, VALUE ri)
|
|
223
|
+
{
|
|
224
|
+
long i = NUM2LONG(ri);
|
|
225
|
+
const uint8_t *ptr;
|
|
226
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
227
|
+
int64_t res;
|
|
228
|
+
StringValue(rstr);
|
|
229
|
+
i = check_size(i, RSTRING_LEN(rstr), 5);
|
|
230
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
231
|
+
|
|
232
|
+
byte0 = ptr[i];
|
|
233
|
+
byte1 = ptr[i+1];
|
|
234
|
+
byte2 = ptr[i+2];
|
|
235
|
+
byte3 = ptr[i+3];
|
|
236
|
+
res = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
237
|
+
byte0 = ptr[i+4];
|
|
238
|
+
return res + ((int64_t)byte0 << 32);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
static int64_t
|
|
242
|
+
get_sint40_le(VALUE rstr, VALUE ri)
|
|
243
|
+
{
|
|
244
|
+
int64_t res = get_int40_le(rstr, ri);
|
|
245
|
+
return res - ((res >> 39) << 40);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
static int64_t
|
|
249
|
+
get_int40_be(VALUE rstr, VALUE ri)
|
|
250
|
+
{
|
|
251
|
+
long i = NUM2LONG(ri);
|
|
252
|
+
const uint8_t *ptr;
|
|
253
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
254
|
+
int64_t res;
|
|
255
|
+
StringValue(rstr);
|
|
256
|
+
i = check_size(i, RSTRING_LEN(rstr), 5);
|
|
257
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
258
|
+
|
|
259
|
+
byte0 = ptr[i+4];
|
|
260
|
+
byte1 = ptr[i+3];
|
|
261
|
+
byte2 = ptr[i+2];
|
|
262
|
+
byte3 = ptr[i+1];
|
|
263
|
+
res = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
264
|
+
byte0 = ptr[i];
|
|
265
|
+
return res + ((int64_t)byte0 << 32);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
static int64_t
|
|
269
|
+
get_sint40_be(VALUE rstr, VALUE ri)
|
|
270
|
+
{
|
|
271
|
+
int64_t res = get_int40_be(rstr, ri);
|
|
272
|
+
return res - ((res >> 39) << 40);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
static int64_t
|
|
276
|
+
get_int48_le(VALUE rstr, VALUE ri)
|
|
277
|
+
{
|
|
278
|
+
long i = NUM2LONG(ri);
|
|
279
|
+
const uint8_t *ptr;
|
|
280
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
281
|
+
int64_t res, res1;
|
|
282
|
+
StringValue(rstr);
|
|
283
|
+
i = check_size(i, RSTRING_LEN(rstr), 6);
|
|
284
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
285
|
+
|
|
286
|
+
byte0 = ptr[i];
|
|
287
|
+
byte1 = ptr[i+1];
|
|
288
|
+
byte2 = ptr[i+2];
|
|
289
|
+
byte3 = ptr[i+3];
|
|
290
|
+
res = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
291
|
+
byte0 = ptr[i+4];
|
|
292
|
+
byte1 = ptr[i+5];
|
|
293
|
+
res1 = byte0 + (byte1 << 8);
|
|
294
|
+
return res + (res1 << 32);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
static int64_t
|
|
298
|
+
get_sint48_le(VALUE rstr, VALUE ri)
|
|
299
|
+
{
|
|
300
|
+
int64_t res = get_int48_le(rstr, ri);
|
|
301
|
+
return res - ((res >> 47) << 48);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
static int64_t
|
|
305
|
+
get_int48_be(VALUE rstr, VALUE ri)
|
|
306
|
+
{
|
|
307
|
+
long i = NUM2LONG(ri);
|
|
308
|
+
const uint8_t *ptr;
|
|
309
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
310
|
+
int64_t res, res1;
|
|
311
|
+
StringValue(rstr);
|
|
312
|
+
i = check_size(i, RSTRING_LEN(rstr), 6);
|
|
313
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
314
|
+
|
|
315
|
+
byte0 = ptr[i+5];
|
|
316
|
+
byte1 = ptr[i+4];
|
|
317
|
+
byte2 = ptr[i+3];
|
|
318
|
+
byte3 = ptr[i+2];
|
|
319
|
+
res = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
320
|
+
byte0 = ptr[i+1];
|
|
321
|
+
byte1 = ptr[i+0];
|
|
322
|
+
res1 = byte0 + (byte1 << 8);
|
|
323
|
+
return res + (res1 << 32);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
static int64_t
|
|
327
|
+
get_sint48_be(VALUE rstr, VALUE ri)
|
|
328
|
+
{
|
|
329
|
+
int64_t res = get_int48_be(rstr, ri);
|
|
330
|
+
return res - ((res >> 47) << 48);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
static int64_t
|
|
334
|
+
get_int56_le(VALUE rstr, VALUE ri)
|
|
335
|
+
{
|
|
336
|
+
long i = NUM2LONG(ri);
|
|
337
|
+
const uint8_t *ptr;
|
|
338
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
339
|
+
int64_t res, res1;
|
|
340
|
+
StringValue(rstr);
|
|
341
|
+
i = check_size(i, RSTRING_LEN(rstr), 7);
|
|
342
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
343
|
+
|
|
344
|
+
byte0 = ptr[i];
|
|
345
|
+
byte1 = ptr[i+1];
|
|
346
|
+
byte2 = ptr[i+2];
|
|
347
|
+
byte3 = ptr[i+3];
|
|
348
|
+
res = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
349
|
+
byte0 = ptr[i+4];
|
|
350
|
+
byte1 = ptr[i+5];
|
|
351
|
+
byte2 = ptr[i+6];
|
|
352
|
+
res1 = byte0 + (byte1 << 8) + (byte2 << 16);
|
|
353
|
+
return res + (res1 << 32);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
static int64_t
|
|
357
|
+
get_sint56_le(VALUE rstr, VALUE ri)
|
|
358
|
+
{
|
|
359
|
+
int64_t res = get_int56_le(rstr, ri);
|
|
360
|
+
return res - ((res >> 55) << 56);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
static int64_t
|
|
364
|
+
get_int56_be(VALUE rstr, VALUE ri)
|
|
365
|
+
{
|
|
366
|
+
long i = NUM2LONG(ri);
|
|
367
|
+
const uint8_t *ptr;
|
|
368
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
369
|
+
int64_t res, res1;
|
|
370
|
+
StringValue(rstr);
|
|
371
|
+
i = check_size(i, RSTRING_LEN(rstr), 7);
|
|
372
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
373
|
+
|
|
374
|
+
byte0 = ptr[i+6];
|
|
375
|
+
byte1 = ptr[i+5];
|
|
376
|
+
byte2 = ptr[i+4];
|
|
377
|
+
byte3 = ptr[i+3];
|
|
378
|
+
res = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
379
|
+
byte0 = ptr[i+2];
|
|
380
|
+
byte1 = ptr[i+1];
|
|
381
|
+
byte2 = ptr[i];
|
|
382
|
+
res1 = byte0 + (byte1 << 8) + (byte2 << 16);
|
|
383
|
+
return res + (res1 << 32);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
static int64_t
|
|
387
|
+
get_sint56_be(VALUE rstr, VALUE ri)
|
|
388
|
+
{
|
|
389
|
+
int64_t res = get_int56_be(rstr, ri);
|
|
390
|
+
return res - ((res >> 55) << 56);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
static uint64_t
|
|
394
|
+
get_int64_le(VALUE rstr, VALUE ri)
|
|
395
|
+
{
|
|
396
|
+
long i = NUM2LONG(ri);
|
|
397
|
+
const uint8_t *ptr;
|
|
398
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
399
|
+
int64_t res, res1;
|
|
400
|
+
StringValue(rstr);
|
|
401
|
+
i = check_size(i, RSTRING_LEN(rstr), 8);
|
|
402
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
403
|
+
|
|
404
|
+
byte0 = ptr[i];
|
|
405
|
+
byte1 = ptr[i+1];
|
|
406
|
+
byte2 = ptr[i+2];
|
|
407
|
+
byte3 = ptr[i+3];
|
|
408
|
+
res = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
409
|
+
byte0 = ptr[i+4];
|
|
410
|
+
byte1 = ptr[i+5];
|
|
411
|
+
byte2 = ptr[i+6];
|
|
412
|
+
byte3 = ptr[i+7];
|
|
413
|
+
res1 = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
414
|
+
return res + (res1 << 32);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
static int64_t
|
|
418
|
+
get_sint64_le(VALUE rstr, VALUE ri)
|
|
419
|
+
{
|
|
420
|
+
return (int64_t)get_int64_le(rstr, ri);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
static uint64_t
|
|
424
|
+
get_int64_be(VALUE rstr, VALUE ri)
|
|
425
|
+
{
|
|
426
|
+
long i = NUM2LONG(ri);
|
|
427
|
+
const uint8_t *ptr;
|
|
428
|
+
uint32_t byte0, byte1, byte2, byte3;
|
|
429
|
+
int64_t res, res1;
|
|
430
|
+
StringValue(rstr);
|
|
431
|
+
i = check_size(i, RSTRING_LEN(rstr), 8);
|
|
432
|
+
ptr = (const uint8_t*)RSTRING_PTR(rstr);
|
|
433
|
+
|
|
434
|
+
byte0 = ptr[i+7];
|
|
435
|
+
byte1 = ptr[i+6];
|
|
436
|
+
byte2 = ptr[i+5];
|
|
437
|
+
byte3 = ptr[i+4];
|
|
438
|
+
res = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
439
|
+
byte0 = ptr[i+3];
|
|
440
|
+
byte1 = ptr[i+2];
|
|
441
|
+
byte2 = ptr[i+1];
|
|
442
|
+
byte3 = ptr[i];
|
|
443
|
+
res1 = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24);
|
|
444
|
+
return res + (res1 << 32);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
static int64_t
|
|
448
|
+
get_sint64_be(VALUE rstr, VALUE ri)
|
|
449
|
+
{
|
|
450
|
+
return (int64_t)get_int64_be(rstr, ri);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
static uint64_t
|
|
454
|
+
parse_ber(const uint8_t *ptr, long max, long *i)
|
|
455
|
+
{
|
|
456
|
+
uint64_t res = 0;
|
|
457
|
+
while (1) {
|
|
458
|
+
if (*ptr < 128) {
|
|
459
|
+
res += *ptr;
|
|
460
|
+
break;
|
|
461
|
+
}
|
|
462
|
+
if (res > LLU(0xFFFFFFFFFFFFFFFF) / 128) {
|
|
463
|
+
rb_raise(rb_eArgError, "BER integer is greater then 2**64, could not parse such big");
|
|
464
|
+
}
|
|
465
|
+
res = (res + ((*ptr) - 128)) * 128;
|
|
466
|
+
ptr++;
|
|
467
|
+
if (++(*i) >= max) {
|
|
468
|
+
rb_raise(rb_eArgError, "String unexpectedly finished while parsing BER integer");
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return res;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
static uint64_t
|
|
475
|
+
get_ber(VALUE rstr, VALUE ri)
|
|
476
|
+
{
|
|
477
|
+
long i = NUM2LONG(ri), len;
|
|
478
|
+
const uint8_t *ptr;
|
|
479
|
+
StringValue(rstr);
|
|
480
|
+
len = RSTRING_LEN(rstr);
|
|
481
|
+
i = check_size(i, len, 1);
|
|
482
|
+
ptr = RSTRING_PTR(rstr) + i;
|
|
483
|
+
return parse_ber(ptr, len, &i);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
static int64_t
|
|
487
|
+
safe_int64_t(VALUE i)
|
|
488
|
+
{
|
|
489
|
+
if (FIXNUM_P(i)) {
|
|
490
|
+
return NUM2I64(i);
|
|
491
|
+
}
|
|
492
|
+
else {
|
|
493
|
+
VALUE argm = UINT2NUM(0xffffffff);
|
|
494
|
+
VALUE arg32 = INT2FIX(32);
|
|
495
|
+
uint64_t i0 = NUM2I64(rb_funcall2(i, band, 1, &argm));
|
|
496
|
+
i = rb_funcall2(i, rshft, 1, &arg32);
|
|
497
|
+
return i0 + (NUM2I64(rb_funcall2(i, band, 1, &argm)) << 32);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
static VALUE
|
|
502
|
+
check_argc(int argc, VALUE *argv)
|
|
503
|
+
{
|
|
504
|
+
if (argc == 0 || argc > 2) {
|
|
505
|
+
rb_raise(rb_eArgError, "accepts 1 or 2 arguments: (string[, offset=0])");
|
|
506
|
+
}
|
|
507
|
+
return argc == 2 ? argv[1] : INT2FIX(0);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**** GET ****/
|
|
511
|
+
/**** 32bit ***/
|
|
512
|
+
static VALUE
|
|
513
|
+
rb_get_int8(int argc, VALUE *argv, VALUE self)
|
|
514
|
+
{
|
|
515
|
+
return INT2FIX(get_int8(argv[0], check_argc(argc, argv)));
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
static VALUE
|
|
519
|
+
rb_get_sint8(int argc, VALUE *argv, VALUE self)
|
|
520
|
+
{
|
|
521
|
+
return INT2FIX(get_sint8(argv[0], check_argc(argc, argv)));
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
static VALUE
|
|
525
|
+
rb_get_int16_le(int argc, VALUE *argv, VALUE self)
|
|
526
|
+
{
|
|
527
|
+
return INT2FIX(get_int16_le(argv[0], check_argc(argc, argv)));
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
static VALUE
|
|
531
|
+
rb_get_sint16_le(int argc, VALUE *argv, VALUE self)
|
|
532
|
+
{
|
|
533
|
+
return INT2FIX(get_sint16_le(argv[0], check_argc(argc, argv)));
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
static VALUE
|
|
537
|
+
rb_get_int16_be(int argc, VALUE *argv, VALUE self)
|
|
538
|
+
{
|
|
539
|
+
return INT2FIX(get_int16_be(argv[0], check_argc(argc, argv)));
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
static VALUE
|
|
543
|
+
rb_get_sint16_be(int argc, VALUE *argv, VALUE self)
|
|
544
|
+
{
|
|
545
|
+
return INT2FIX(get_sint16_be(argv[0], check_argc(argc, argv)));
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
static VALUE
|
|
549
|
+
rb_get_int24_le(int argc, VALUE *argv, VALUE self)
|
|
550
|
+
{
|
|
551
|
+
return INT2FIX(get_int24_le(argv[0], check_argc(argc, argv)));
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
static VALUE
|
|
555
|
+
rb_get_sint24_le(int argc, VALUE *argv, VALUE self)
|
|
556
|
+
{
|
|
557
|
+
return INT2FIX(get_sint24_le(argv[0], check_argc(argc, argv)));
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
static VALUE
|
|
561
|
+
rb_get_int24_be(int argc, VALUE *argv, VALUE self)
|
|
562
|
+
{
|
|
563
|
+
return INT2FIX(get_int24_be(argv[0], check_argc(argc, argv)));
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
static VALUE
|
|
567
|
+
rb_get_sint24_be(int argc, VALUE *argv, VALUE self)
|
|
568
|
+
{
|
|
569
|
+
return INT2FIX(get_sint24_be(argv[0], check_argc(argc, argv)));
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
static VALUE
|
|
573
|
+
rb_get_int32_le(int argc, VALUE *argv, VALUE self)
|
|
574
|
+
{
|
|
575
|
+
return UINT2NUM(get_int32_le(argv[0], check_argc(argc, argv)));
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
static VALUE
|
|
579
|
+
rb_get_sint32_le(int argc, VALUE *argv, VALUE self)
|
|
580
|
+
{
|
|
581
|
+
return INT2NUM(get_sint32_le(argv[0], check_argc(argc, argv)));
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
static VALUE
|
|
585
|
+
rb_get_int32_be(int argc, VALUE *argv, VALUE self)
|
|
586
|
+
{
|
|
587
|
+
return UINT2NUM(get_int32_be(argv[0], check_argc(argc, argv)));
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
static VALUE
|
|
591
|
+
rb_get_sint32_be(int argc, VALUE *argv, VALUE self)
|
|
592
|
+
{
|
|
593
|
+
return INT2NUM(get_sint32_be(argv[0], check_argc(argc, argv)));
|
|
594
|
+
}
|
|
595
|
+
/*** 32BIT END ***/
|
|
596
|
+
|
|
597
|
+
/*** 64BIT ***/
|
|
598
|
+
static VALUE
|
|
599
|
+
rb_get_int40_le(int argc, VALUE *argv, VALUE self)
|
|
600
|
+
{
|
|
601
|
+
return I642NUM(get_int40_le(argv[0], check_argc(argc, argv)));
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
static VALUE
|
|
605
|
+
rb_get_sint40_le(int argc, VALUE *argv, VALUE self)
|
|
606
|
+
{
|
|
607
|
+
return I642NUM(get_sint40_le(argv[0], check_argc(argc, argv)));
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
static VALUE
|
|
611
|
+
rb_get_int40_be(int argc, VALUE *argv, VALUE self)
|
|
612
|
+
{
|
|
613
|
+
return I642NUM(get_int40_be(argv[0], check_argc(argc, argv)));
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
static VALUE
|
|
617
|
+
rb_get_sint40_be(int argc, VALUE *argv, VALUE self)
|
|
618
|
+
{
|
|
619
|
+
return I642NUM(get_sint40_be(argv[0], check_argc(argc, argv)));
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
static VALUE
|
|
623
|
+
rb_get_int48_le(int argc, VALUE *argv, VALUE self)
|
|
624
|
+
{
|
|
625
|
+
return I642NUM(get_int48_le(argv[0], check_argc(argc, argv)));
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
static VALUE
|
|
629
|
+
rb_get_sint48_le(int argc, VALUE *argv, VALUE self)
|
|
630
|
+
{
|
|
631
|
+
return I642NUM(get_sint48_le(argv[0], check_argc(argc, argv)));
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
static VALUE
|
|
635
|
+
rb_get_int48_be(int argc, VALUE *argv, VALUE self)
|
|
636
|
+
{
|
|
637
|
+
return I642NUM(get_int48_be(argv[0], check_argc(argc, argv)));
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
static VALUE
|
|
641
|
+
rb_get_sint48_be(int argc, VALUE *argv, VALUE self)
|
|
642
|
+
{
|
|
643
|
+
return I642NUM(get_sint48_be(argv[0], check_argc(argc, argv)));
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
static VALUE
|
|
647
|
+
rb_get_int56_le(int argc, VALUE *argv, VALUE self)
|
|
648
|
+
{
|
|
649
|
+
return I642NUM(get_int56_le(argv[0], check_argc(argc, argv)));
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
static VALUE
|
|
653
|
+
rb_get_sint56_le(int argc, VALUE *argv, VALUE self)
|
|
654
|
+
{
|
|
655
|
+
return I642NUM(get_sint56_le(argv[0], check_argc(argc, argv)));
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
static VALUE
|
|
659
|
+
rb_get_int56_be(int argc, VALUE *argv, VALUE self)
|
|
660
|
+
{
|
|
661
|
+
return I642NUM(get_int56_be(argv[0], check_argc(argc, argv)));
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
static VALUE
|
|
665
|
+
rb_get_sint56_be(int argc, VALUE *argv, VALUE self)
|
|
666
|
+
{
|
|
667
|
+
return I642NUM(get_sint56_be(argv[0], check_argc(argc, argv)));
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
static VALUE
|
|
671
|
+
rb_get_int64_le(int argc, VALUE *argv, VALUE self)
|
|
672
|
+
{
|
|
673
|
+
return U642NUM(get_int64_le(argv[0], check_argc(argc, argv)));
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
static VALUE
|
|
677
|
+
rb_get_sint64_le(int argc, VALUE *argv, VALUE self)
|
|
678
|
+
{
|
|
679
|
+
return I642NUM(get_sint64_le(argv[0], check_argc(argc, argv)));
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
static VALUE
|
|
683
|
+
rb_get_int64_be(int argc, VALUE *argv, VALUE self)
|
|
684
|
+
{
|
|
685
|
+
return U642NUM(get_int64_be(argv[0], check_argc(argc, argv)));
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
static VALUE
|
|
689
|
+
rb_get_sint64_be(int argc, VALUE *argv, VALUE self)
|
|
690
|
+
{
|
|
691
|
+
return I642NUM(get_sint64_be(argv[0], check_argc(argc, argv)));
|
|
692
|
+
}
|
|
693
|
+
/*** 64BIT END ***/
|
|
694
|
+
|
|
695
|
+
static VALUE
|
|
696
|
+
rb_get_ber(int argc, VALUE *argv, VALUE self)
|
|
697
|
+
{
|
|
698
|
+
return U642NUM(get_ber(argv[0], check_argc(argc, argv)));
|
|
699
|
+
}
|
|
700
|
+
/** GET END **/
|
|
701
|
+
|
|
702
|
+
/** SLICE **/
|
|
703
|
+
/*** 32BIT ***/
|
|
704
|
+
static VALUE
|
|
705
|
+
rb_slice_int8(VALUE self, VALUE rstr)
|
|
706
|
+
{
|
|
707
|
+
int32_t res = get_int8(rstr, INT2FIX(0));
|
|
708
|
+
rb_str_drop_bytes(rstr, 1);
|
|
709
|
+
return INT2FIX(res);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
static VALUE
|
|
713
|
+
rb_slice_sint8(VALUE self, VALUE rstr)
|
|
714
|
+
{
|
|
715
|
+
int32_t res = get_sint8(rstr, INT2FIX(0));
|
|
716
|
+
rb_str_drop_bytes(rstr, 1);
|
|
717
|
+
return INT2FIX(res);
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
static VALUE
|
|
721
|
+
rb_slice_int16_le(VALUE self, VALUE rstr)
|
|
722
|
+
{
|
|
723
|
+
int32_t res = get_int16_le(rstr, INT2FIX(0));
|
|
724
|
+
rb_str_drop_bytes(rstr, 2);
|
|
725
|
+
return INT2FIX(res);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
static VALUE
|
|
729
|
+
rb_slice_sint16_le(VALUE self, VALUE rstr)
|
|
730
|
+
{
|
|
731
|
+
int32_t res = get_sint16_le(rstr, INT2FIX(0));
|
|
732
|
+
rb_str_drop_bytes(rstr, 2);
|
|
733
|
+
return INT2FIX(res);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
static VALUE
|
|
737
|
+
rb_slice_int16_be(VALUE self, VALUE rstr)
|
|
738
|
+
{
|
|
739
|
+
int32_t res = get_int16_be(rstr, INT2FIX(0));
|
|
740
|
+
rb_str_drop_bytes(rstr, 2);
|
|
741
|
+
return INT2FIX(res);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
static VALUE
|
|
745
|
+
rb_slice_sint16_be(VALUE self, VALUE rstr)
|
|
746
|
+
{
|
|
747
|
+
int32_t res = get_sint16_be(rstr, INT2FIX(0));
|
|
748
|
+
rb_str_drop_bytes(rstr, 2);
|
|
749
|
+
return INT2FIX(res);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
static VALUE
|
|
753
|
+
rb_slice_int24_le(VALUE self, VALUE rstr)
|
|
754
|
+
{
|
|
755
|
+
int32_t res = get_int24_le(rstr, INT2FIX(0));
|
|
756
|
+
rb_str_drop_bytes(rstr, 3);
|
|
757
|
+
return INT2FIX(res);
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
static VALUE
|
|
761
|
+
rb_slice_sint24_le(VALUE self, VALUE rstr)
|
|
762
|
+
{
|
|
763
|
+
int32_t res = get_sint24_le(rstr, INT2FIX(0));
|
|
764
|
+
rb_str_drop_bytes(rstr, 3);
|
|
765
|
+
return INT2FIX(res);
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
static VALUE
|
|
769
|
+
rb_slice_int24_be(VALUE self, VALUE rstr)
|
|
770
|
+
{
|
|
771
|
+
int32_t res = get_int24_be(rstr, INT2FIX(0));
|
|
772
|
+
rb_str_drop_bytes(rstr, 3);
|
|
773
|
+
return INT2FIX(res);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
static VALUE
|
|
777
|
+
rb_slice_sint24_be(VALUE self, VALUE rstr)
|
|
778
|
+
{
|
|
779
|
+
int32_t res = get_sint24_be(rstr, INT2FIX(0));
|
|
780
|
+
rb_str_drop_bytes(rstr, 3);
|
|
781
|
+
return INT2FIX(res);
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
static VALUE
|
|
785
|
+
rb_slice_int32_le(VALUE self, VALUE rstr)
|
|
786
|
+
{
|
|
787
|
+
uint32_t res = get_int32_le(rstr, INT2FIX(0));
|
|
788
|
+
rb_str_drop_bytes(rstr, 4);
|
|
789
|
+
return UINT2NUM(res);
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
static VALUE
|
|
793
|
+
rb_slice_sint32_le(VALUE self, VALUE rstr)
|
|
794
|
+
{
|
|
795
|
+
int32_t res = get_sint32_le(rstr, INT2FIX(0));
|
|
796
|
+
rb_str_drop_bytes(rstr, 4);
|
|
797
|
+
return INT2NUM(res);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
static VALUE
|
|
801
|
+
rb_slice_int32_be(VALUE self, VALUE rstr)
|
|
802
|
+
{
|
|
803
|
+
uint32_t res = get_int32_be(rstr, INT2FIX(0));
|
|
804
|
+
rb_str_drop_bytes(rstr, 4);
|
|
805
|
+
return UINT2NUM(res);
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
static VALUE
|
|
809
|
+
rb_slice_sint32_be(VALUE self, VALUE rstr)
|
|
810
|
+
{
|
|
811
|
+
int32_t res = get_sint32_be(rstr, INT2FIX(0));
|
|
812
|
+
rb_str_drop_bytes(rstr, 4);
|
|
813
|
+
return INT2NUM(res);
|
|
814
|
+
}
|
|
815
|
+
/*** 32BIT END ***/
|
|
816
|
+
|
|
817
|
+
/*** 64BIT ***/
|
|
818
|
+
static VALUE
|
|
819
|
+
rb_slice_int40_le(VALUE self, VALUE rstr)
|
|
820
|
+
{
|
|
821
|
+
int64_t res = get_int40_le(rstr, INT2FIX(0));
|
|
822
|
+
rb_str_drop_bytes(rstr, 5);
|
|
823
|
+
return I642NUM(res);
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
static VALUE
|
|
827
|
+
rb_slice_sint40_le(VALUE self, VALUE rstr)
|
|
828
|
+
{
|
|
829
|
+
int64_t res = get_sint40_le(rstr, INT2FIX(0));
|
|
830
|
+
rb_str_drop_bytes(rstr, 5);
|
|
831
|
+
return I642NUM(res);
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
static VALUE
|
|
835
|
+
rb_slice_int40_be(VALUE self, VALUE rstr)
|
|
836
|
+
{
|
|
837
|
+
int64_t res = get_int40_be(rstr, INT2FIX(0));
|
|
838
|
+
rb_str_drop_bytes(rstr, 5);
|
|
839
|
+
return I642NUM(res);
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
static VALUE
|
|
843
|
+
rb_slice_sint40_be(VALUE self, VALUE rstr)
|
|
844
|
+
{
|
|
845
|
+
int64_t res = get_sint40_be(rstr, INT2FIX(0));
|
|
846
|
+
rb_str_drop_bytes(rstr, 5);
|
|
847
|
+
return I642NUM(res);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
static VALUE
|
|
851
|
+
rb_slice_int48_le(VALUE self, VALUE rstr)
|
|
852
|
+
{
|
|
853
|
+
int64_t res = get_int48_le(rstr, INT2FIX(0));
|
|
854
|
+
rb_str_drop_bytes(rstr, 6);
|
|
855
|
+
return I642NUM(res);
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
static VALUE
|
|
859
|
+
rb_slice_sint48_le(VALUE self, VALUE rstr)
|
|
860
|
+
{
|
|
861
|
+
int64_t res = get_sint48_le(rstr, INT2FIX(0));
|
|
862
|
+
rb_str_drop_bytes(rstr, 6);
|
|
863
|
+
return I642NUM(res);
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
static VALUE
|
|
867
|
+
rb_slice_int48_be(VALUE self, VALUE rstr)
|
|
868
|
+
{
|
|
869
|
+
int64_t res = get_int48_be(rstr, INT2FIX(0));
|
|
870
|
+
rb_str_drop_bytes(rstr, 6);
|
|
871
|
+
return I642NUM(res);
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
static VALUE
|
|
875
|
+
rb_slice_sint48_be(VALUE self, VALUE rstr)
|
|
876
|
+
{
|
|
877
|
+
int64_t res = get_sint48_be(rstr, INT2FIX(0));
|
|
878
|
+
rb_str_drop_bytes(rstr, 6);
|
|
879
|
+
return I642NUM(res);
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
static VALUE
|
|
883
|
+
rb_slice_int56_le(VALUE self, VALUE rstr)
|
|
884
|
+
{
|
|
885
|
+
int64_t res = get_int56_le(rstr, INT2FIX(0));
|
|
886
|
+
rb_str_drop_bytes(rstr, 7);
|
|
887
|
+
return I642NUM(res);
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
static VALUE
|
|
891
|
+
rb_slice_sint56_le(VALUE self, VALUE rstr)
|
|
892
|
+
{
|
|
893
|
+
int64_t res = get_sint56_le(rstr, INT2FIX(0));
|
|
894
|
+
rb_str_drop_bytes(rstr, 7);
|
|
895
|
+
return I642NUM(res);
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
static VALUE
|
|
899
|
+
rb_slice_int56_be(VALUE self, VALUE rstr)
|
|
900
|
+
{
|
|
901
|
+
int64_t res = get_int56_be(rstr, INT2FIX(0));
|
|
902
|
+
rb_str_drop_bytes(rstr, 7);
|
|
903
|
+
return I642NUM(res);
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
static VALUE
|
|
907
|
+
rb_slice_sint56_be(VALUE self, VALUE rstr)
|
|
908
|
+
{
|
|
909
|
+
int64_t res = get_sint56_be(rstr, INT2FIX(0));
|
|
910
|
+
rb_str_drop_bytes(rstr, 7);
|
|
911
|
+
return I642NUM(res);
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
static VALUE
|
|
915
|
+
rb_slice_int64_le(VALUE self, VALUE rstr)
|
|
916
|
+
{
|
|
917
|
+
uint64_t res = get_int64_le(rstr, INT2FIX(0));
|
|
918
|
+
rb_str_drop_bytes(rstr, 8);
|
|
919
|
+
return U642NUM(res);
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
static VALUE
|
|
923
|
+
rb_slice_sint64_le(VALUE self, VALUE rstr)
|
|
924
|
+
{
|
|
925
|
+
int64_t res = get_sint64_le(rstr, INT2FIX(0));
|
|
926
|
+
rb_str_drop_bytes(rstr, 8);
|
|
927
|
+
return I642NUM(res);
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
static VALUE
|
|
931
|
+
rb_slice_int64_be(VALUE self, VALUE rstr)
|
|
932
|
+
{
|
|
933
|
+
uint64_t res = get_int64_be(rstr, INT2FIX(0));
|
|
934
|
+
rb_str_drop_bytes(rstr, 8);
|
|
935
|
+
return U642NUM(res);
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
static VALUE
|
|
939
|
+
rb_slice_sint64_be(VALUE self, VALUE rstr)
|
|
940
|
+
{
|
|
941
|
+
int64_t res = get_sint64_be(rstr, INT2FIX(0));
|
|
942
|
+
rb_str_drop_bytes(rstr, 8);
|
|
943
|
+
return I642NUM(res);
|
|
944
|
+
}
|
|
945
|
+
/*** 64BIT END ***/
|
|
946
|
+
|
|
947
|
+
static uint64_t
|
|
948
|
+
slice_ber(VALUE rstr, long *i)
|
|
949
|
+
{
|
|
950
|
+
long len;
|
|
951
|
+
const uint8_t *ptr;
|
|
952
|
+
StringValue(rstr);
|
|
953
|
+
len = RSTRING_LEN(rstr);
|
|
954
|
+
ptr = RSTRING_PTR(rstr);
|
|
955
|
+
return parse_ber(ptr, len, i);
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
static VALUE
|
|
959
|
+
rb_slice_ber(VALUE self, VALUE rstr)
|
|
960
|
+
{
|
|
961
|
+
long i = 0;
|
|
962
|
+
int64_t res = slice_ber(rstr, &i);
|
|
963
|
+
rb_str_drop_bytes(rstr, i+1);
|
|
964
|
+
return U642NUM(res);
|
|
965
|
+
}
|
|
966
|
+
/** SLICE END **/
|
|
967
|
+
|
|
968
|
+
/** APPEND **/
|
|
969
|
+
static void
|
|
970
|
+
append_int8(VALUE rstr, int32_t v)
|
|
971
|
+
{
|
|
972
|
+
char a[1] = {v & 255};
|
|
973
|
+
rb_str_cat(rstr, a, 1);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
static void
|
|
977
|
+
append_int16_le(VALUE rstr, int32_t v)
|
|
978
|
+
{
|
|
979
|
+
char a[2] = {v & 255, (v >> 8) & 255};
|
|
980
|
+
rb_str_cat(rstr, a, 2);
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
static void
|
|
984
|
+
append_int16_be(VALUE rstr, int32_t v)
|
|
985
|
+
{
|
|
986
|
+
char a[2] = {(v >> 8) & 255, v & 255};
|
|
987
|
+
rb_str_cat(rstr, a, 2);
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
static void
|
|
991
|
+
append_int24_le(VALUE rstr, int32_t v)
|
|
992
|
+
{
|
|
993
|
+
char a[3] = {v & 255, (v >> 8) & 255, (v >> 16) & 255};
|
|
994
|
+
rb_str_cat(rstr, a, 3);
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
static void
|
|
998
|
+
append_int24_be(VALUE rstr, int32_t v)
|
|
999
|
+
{
|
|
1000
|
+
char a[3] = {(v >> 16) & 255, (v >> 8) & 255, v & 255};
|
|
1001
|
+
rb_str_cat(rstr, a, 3);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
static void
|
|
1005
|
+
append_int32_le(VALUE rstr, int32_t v)
|
|
1006
|
+
{
|
|
1007
|
+
char a[4] = {v & 255, (v >> 8) & 255, (v >> 16) & 255, (v >> 24) & 255};
|
|
1008
|
+
rb_str_cat(rstr, a, 4);
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
static void
|
|
1012
|
+
append_int32_be(VALUE rstr, int32_t v)
|
|
1013
|
+
{
|
|
1014
|
+
char a[4] = {(v >> 24) & 255, (v >> 16) & 255, (v >> 8) & 255, v & 255};
|
|
1015
|
+
rb_str_cat(rstr, a, 4);
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
static void
|
|
1019
|
+
append_int40_le(VALUE rstr, int64_t v)
|
|
1020
|
+
{
|
|
1021
|
+
char a[5] = {v & 255, (v >> 8) & 255, (v >> 16) & 255, (v >> 24) & 255,
|
|
1022
|
+
(v >> 32) & 255};
|
|
1023
|
+
rb_str_cat(rstr, a, 5);
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
static void
|
|
1027
|
+
append_int40_be(VALUE rstr, int64_t v)
|
|
1028
|
+
{
|
|
1029
|
+
char a[5] = {(v >> 32) & 255,
|
|
1030
|
+
(v >> 24) & 255, (v >> 16) & 255, (v >> 8) & 255, v & 255};
|
|
1031
|
+
rb_str_cat(rstr, a, 5);
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
static void
|
|
1035
|
+
append_int48_le(VALUE rstr, int64_t v)
|
|
1036
|
+
{
|
|
1037
|
+
char a[6] = {v & 255, (v >> 8) & 255, (v >> 16) & 255, (v >> 24) & 255,
|
|
1038
|
+
(v >> 32) & 255, (v >> 40) & 255};
|
|
1039
|
+
rb_str_cat(rstr, a, 6);
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
static void
|
|
1043
|
+
append_int48_be(VALUE rstr, int64_t v)
|
|
1044
|
+
{
|
|
1045
|
+
char a[6] = {(v >> 40) & 255, (v >> 32) & 255,
|
|
1046
|
+
(v >> 24) & 255, (v >> 16) & 255, (v >> 8) & 255, v & 255};
|
|
1047
|
+
rb_str_cat(rstr, a, 6);
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
static void
|
|
1051
|
+
append_int56_le(VALUE rstr, int64_t v)
|
|
1052
|
+
{
|
|
1053
|
+
char a[7] = {v & 255, (v >> 8) & 255, (v >> 16) & 255, (v >> 24) & 255,
|
|
1054
|
+
(v >> 32) & 255, (v >> 40) & 255, (v >> 48) & 255};
|
|
1055
|
+
rb_str_cat(rstr, a, 7);
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
static void
|
|
1059
|
+
append_int56_be(VALUE rstr, int64_t v)
|
|
1060
|
+
{
|
|
1061
|
+
char a[7] = {(v >> 48) & 255, (v >> 40) & 255, (v >> 32) & 255,
|
|
1062
|
+
(v >> 24) & 255, (v >> 16) & 255, (v >> 8) & 255, v & 255};
|
|
1063
|
+
rb_str_cat(rstr, a, 7);
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
static void
|
|
1067
|
+
append_int64_le(VALUE rstr, int64_t v)
|
|
1068
|
+
{
|
|
1069
|
+
char a[8] = {v & 255, (v >> 8) & 255, (v >> 16) & 255, (v >> 24) & 255,
|
|
1070
|
+
(v >> 32) & 255, (v >> 40) & 255, (v >> 48) & 255, (v >> 56) & 255};
|
|
1071
|
+
rb_str_cat(rstr, a, 8);
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
static void
|
|
1075
|
+
append_int64_be(VALUE rstr, int64_t v)
|
|
1076
|
+
{
|
|
1077
|
+
char a[8] = {(v >> 56) & 255, (v >> 48) & 255, (v >> 40) & 255, (v >> 32) & 255,
|
|
1078
|
+
(v >> 24) & 255, (v >> 16) & 255, (v >> 8) & 255, v & 255};
|
|
1079
|
+
rb_str_cat(rstr, a, 8);
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
static int
|
|
1083
|
+
append_ber(VALUE rstr, uint64_t ber)
|
|
1084
|
+
{
|
|
1085
|
+
int i = 10;
|
|
1086
|
+
char a[12] = {128, 128, 128, 128,
|
|
1087
|
+
128, 128 ,128 ,128,
|
|
1088
|
+
128, 128, 0};
|
|
1089
|
+
do {
|
|
1090
|
+
a[i] += ber % 128;
|
|
1091
|
+
ber /= 128;
|
|
1092
|
+
i--;
|
|
1093
|
+
} while (ber);
|
|
1094
|
+
i++;
|
|
1095
|
+
rb_str_cat(rstr, a+i, 11-i);
|
|
1096
|
+
|
|
1097
|
+
return 11-i;
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
/*** 32BIT **/
|
|
1101
|
+
static VALUE
|
|
1102
|
+
rb_append_int8(VALUE self, VALUE str, VALUE i)
|
|
1103
|
+
{
|
|
1104
|
+
append_int8(str, NUM2INT(i));
|
|
1105
|
+
return str;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
static VALUE
|
|
1109
|
+
rb_append_int16_le(VALUE self, VALUE str, VALUE i)
|
|
1110
|
+
{
|
|
1111
|
+
append_int16_le(str, NUM2INT(i));
|
|
1112
|
+
return str;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
static VALUE
|
|
1116
|
+
rb_append_int16_be(VALUE self, VALUE str, VALUE i)
|
|
1117
|
+
{
|
|
1118
|
+
append_int16_be(str, NUM2INT(i));
|
|
1119
|
+
return str;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
static VALUE
|
|
1123
|
+
rb_append_int24_le(VALUE self, VALUE str, VALUE i)
|
|
1124
|
+
{
|
|
1125
|
+
append_int24_le(str, NUM2INT(i));
|
|
1126
|
+
return str;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
static VALUE
|
|
1130
|
+
rb_append_int24_be(VALUE self, VALUE str, VALUE i)
|
|
1131
|
+
{
|
|
1132
|
+
append_int24_be(str, NUM2INT(i));
|
|
1133
|
+
return str;
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
static VALUE
|
|
1137
|
+
rb_append_int32_le(VALUE self, VALUE str, VALUE i)
|
|
1138
|
+
{
|
|
1139
|
+
append_int32_le(str, (int32_t)NUM2I64(i));
|
|
1140
|
+
return str;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
static VALUE
|
|
1144
|
+
rb_append_int32_be(VALUE self, VALUE str, VALUE i)
|
|
1145
|
+
{
|
|
1146
|
+
append_int32_be(str, (int32_t)NUM2I64(i));
|
|
1147
|
+
return str;
|
|
1148
|
+
}
|
|
1149
|
+
/*** 32BIT END ***/
|
|
1150
|
+
|
|
1151
|
+
/*** 64BIT ***/
|
|
1152
|
+
static VALUE
|
|
1153
|
+
rb_append_int40_le(VALUE self, VALUE str, VALUE i)
|
|
1154
|
+
{
|
|
1155
|
+
append_int40_le(str, NUM2I64(i));
|
|
1156
|
+
return str;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
static VALUE
|
|
1160
|
+
rb_append_int40_be(VALUE self, VALUE str, VALUE i)
|
|
1161
|
+
{
|
|
1162
|
+
append_int40_be(str, NUM2I64(i));
|
|
1163
|
+
return str;
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
static VALUE
|
|
1167
|
+
rb_append_int48_le(VALUE self, VALUE str, VALUE i)
|
|
1168
|
+
{
|
|
1169
|
+
append_int48_le(str, NUM2I64(i));
|
|
1170
|
+
return str;
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
static VALUE
|
|
1174
|
+
rb_append_int48_be(VALUE self, VALUE str, VALUE i)
|
|
1175
|
+
{
|
|
1176
|
+
append_int48_be(str, NUM2I64(i));
|
|
1177
|
+
return str;
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
static VALUE
|
|
1181
|
+
rb_append_int56_le(VALUE self, VALUE str, VALUE i)
|
|
1182
|
+
{
|
|
1183
|
+
append_int56_le(str, NUM2I64(i));
|
|
1184
|
+
return str;
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
static VALUE
|
|
1188
|
+
rb_append_int56_be(VALUE self, VALUE str, VALUE i)
|
|
1189
|
+
{
|
|
1190
|
+
append_int56_be(str, NUM2I64(i));
|
|
1191
|
+
return str;
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
static VALUE
|
|
1195
|
+
rb_append_int64_le(VALUE self, VALUE str, VALUE i)
|
|
1196
|
+
{
|
|
1197
|
+
append_int64_le(str, safe_int64_t(i));
|
|
1198
|
+
return str;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
static VALUE
|
|
1202
|
+
rb_append_int64_be(VALUE self, VALUE str, VALUE i)
|
|
1203
|
+
{
|
|
1204
|
+
append_int64_be(str, safe_int64_t(i));
|
|
1205
|
+
return str;
|
|
1206
|
+
}
|
|
1207
|
+
/*** 64BIT END **/
|
|
1208
|
+
|
|
1209
|
+
static VALUE
|
|
1210
|
+
rb_append_ber(VALUE self, VALUE str, VALUE i)
|
|
1211
|
+
{
|
|
1212
|
+
append_ber(str, safe_int64_t(i));
|
|
1213
|
+
return str;
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
/** APPEND END **/
|
|
1217
|
+
|
|
1218
|
+
/** APPEND BERSIZE **/
|
|
1219
|
+
/*** 32BIT **/
|
|
1220
|
+
static VALUE
|
|
1221
|
+
rb_append_bersize_int8(VALUE self, VALUE str, VALUE i)
|
|
1222
|
+
{
|
|
1223
|
+
char sz = 1;
|
|
1224
|
+
rb_str_cat(str, &sz, 1);
|
|
1225
|
+
append_int8(str, NUM2INT(i));
|
|
1226
|
+
return str;
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
static VALUE
|
|
1230
|
+
rb_append_bersize_int16_le(VALUE self, VALUE str, VALUE i)
|
|
1231
|
+
{
|
|
1232
|
+
char sz = 2;
|
|
1233
|
+
rb_str_cat(str, &sz, 1);
|
|
1234
|
+
append_int16_le(str, NUM2INT(i));
|
|
1235
|
+
return str;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
static VALUE
|
|
1239
|
+
rb_append_bersize_int16_be(VALUE self, VALUE str, VALUE i)
|
|
1240
|
+
{
|
|
1241
|
+
char sz = 2;
|
|
1242
|
+
rb_str_cat(str, &sz, 1);
|
|
1243
|
+
append_int16_be(str, NUM2INT(i));
|
|
1244
|
+
return str;
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
static VALUE
|
|
1248
|
+
rb_append_bersize_int24_le(VALUE self, VALUE str, VALUE i)
|
|
1249
|
+
{
|
|
1250
|
+
char sz = 3;
|
|
1251
|
+
rb_str_cat(str, &sz, 1);
|
|
1252
|
+
append_int24_le(str, NUM2INT(i));
|
|
1253
|
+
return str;
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
static VALUE
|
|
1257
|
+
rb_append_bersize_int24_be(VALUE self, VALUE str, VALUE i)
|
|
1258
|
+
{
|
|
1259
|
+
char sz = 3;
|
|
1260
|
+
rb_str_cat(str, &sz, 1);
|
|
1261
|
+
append_int24_be(str, NUM2INT(i));
|
|
1262
|
+
return str;
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
static VALUE
|
|
1266
|
+
rb_append_bersize_int32_le(VALUE self, VALUE str, VALUE i)
|
|
1267
|
+
{
|
|
1268
|
+
char sz = 4;
|
|
1269
|
+
rb_str_cat(str, &sz, 1);
|
|
1270
|
+
append_int32_le(str, (int32_t)NUM2I64(i));
|
|
1271
|
+
return str;
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
static VALUE
|
|
1275
|
+
rb_append_bersize_int32_be(VALUE self, VALUE str, VALUE i)
|
|
1276
|
+
{
|
|
1277
|
+
char sz = 4;
|
|
1278
|
+
rb_str_cat(str, &sz, 1);
|
|
1279
|
+
append_int32_be(str, (int32_t)NUM2I64(i));
|
|
1280
|
+
return str;
|
|
1281
|
+
}
|
|
1282
|
+
/*** 32BIT END ***/
|
|
1283
|
+
|
|
1284
|
+
/*** 64BIT ***/
|
|
1285
|
+
static VALUE
|
|
1286
|
+
rb_append_bersize_int40_le(VALUE self, VALUE str, VALUE i)
|
|
1287
|
+
{
|
|
1288
|
+
char sz = 5;
|
|
1289
|
+
rb_str_cat(str, &sz, 1);
|
|
1290
|
+
append_int40_le(str, NUM2I64(i));
|
|
1291
|
+
return str;
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
static VALUE
|
|
1295
|
+
rb_append_bersize_int40_be(VALUE self, VALUE str, VALUE i)
|
|
1296
|
+
{
|
|
1297
|
+
char sz = 5;
|
|
1298
|
+
rb_str_cat(str, &sz, 1);
|
|
1299
|
+
append_int40_be(str, NUM2I64(i));
|
|
1300
|
+
return str;
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
static VALUE
|
|
1304
|
+
rb_append_bersize_int48_le(VALUE self, VALUE str, VALUE i)
|
|
1305
|
+
{
|
|
1306
|
+
char sz = 6;
|
|
1307
|
+
rb_str_cat(str, &sz, 1);
|
|
1308
|
+
append_int48_le(str, NUM2I64(i));
|
|
1309
|
+
return str;
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
static VALUE
|
|
1313
|
+
rb_append_bersize_int48_be(VALUE self, VALUE str, VALUE i)
|
|
1314
|
+
{
|
|
1315
|
+
char sz = 6;
|
|
1316
|
+
rb_str_cat(str, &sz, 1);
|
|
1317
|
+
append_int48_be(str, NUM2I64(i));
|
|
1318
|
+
return str;
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
static VALUE
|
|
1322
|
+
rb_append_bersize_int56_le(VALUE self, VALUE str, VALUE i)
|
|
1323
|
+
{
|
|
1324
|
+
char sz = 7;
|
|
1325
|
+
rb_str_cat(str, &sz, 1);
|
|
1326
|
+
append_int56_le(str, NUM2I64(i));
|
|
1327
|
+
return str;
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
static VALUE
|
|
1331
|
+
rb_append_bersize_int56_be(VALUE self, VALUE str, VALUE i)
|
|
1332
|
+
{
|
|
1333
|
+
char sz = 7;
|
|
1334
|
+
rb_str_cat(str, &sz, 1);
|
|
1335
|
+
append_int56_be(str, NUM2I64(i));
|
|
1336
|
+
return str;
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
static VALUE
|
|
1340
|
+
rb_append_bersize_int64_le(VALUE self, VALUE str, VALUE i)
|
|
1341
|
+
{
|
|
1342
|
+
char sz = 8;
|
|
1343
|
+
rb_str_cat(str, &sz, 1);
|
|
1344
|
+
append_int64_le(str, safe_int64_t(i));
|
|
1345
|
+
return str;
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
static VALUE
|
|
1349
|
+
rb_append_bersize_int64_be(VALUE self, VALUE str, VALUE i)
|
|
1350
|
+
{
|
|
1351
|
+
char sz = 8;
|
|
1352
|
+
rb_str_cat(str, &sz, 1);
|
|
1353
|
+
append_int64_be(str, safe_int64_t(i));
|
|
1354
|
+
return str;
|
|
1355
|
+
}
|
|
1356
|
+
/*** 64BIT END **/
|
|
1357
|
+
|
|
1358
|
+
static VALUE
|
|
1359
|
+
rb_append_bersize_ber(VALUE self, VALUE str, VALUE i)
|
|
1360
|
+
{
|
|
1361
|
+
char c=0;
|
|
1362
|
+
int sl, bl;
|
|
1363
|
+
rb_str_cat(str, &c, 1);
|
|
1364
|
+
sl = RSTRING_LEN(str)-1;
|
|
1365
|
+
bl = append_ber(str, safe_int64_t(i));
|
|
1366
|
+
RSTRING_PTR(str)[sl] = bl;
|
|
1367
|
+
return str;
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
/** APPEND BERSIZE END **/
|
|
1371
|
+
|
|
1372
|
+
/** APPEND INT32LESIZE **/
|
|
1373
|
+
/*** 32BIT **/
|
|
1374
|
+
static VALUE
|
|
1375
|
+
rb_append_int32lesize_int8(VALUE self, VALUE str, VALUE i)
|
|
1376
|
+
{
|
|
1377
|
+
char sz[4] = {1, 0, 0, 0};
|
|
1378
|
+
rb_str_cat(str, sz, 4);
|
|
1379
|
+
append_int8(str, NUM2INT(i));
|
|
1380
|
+
return str;
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
static VALUE
|
|
1384
|
+
rb_append_int32lesize_int16_le(VALUE self, VALUE str, VALUE i)
|
|
1385
|
+
{
|
|
1386
|
+
char sz[4] = {2, 0, 0, 0};
|
|
1387
|
+
rb_str_cat(str, sz, 4);
|
|
1388
|
+
append_int16_le(str, NUM2INT(i));
|
|
1389
|
+
return str;
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
static VALUE
|
|
1393
|
+
rb_append_int32lesize_int16_be(VALUE self, VALUE str, VALUE i)
|
|
1394
|
+
{
|
|
1395
|
+
char sz[4] = {2, 0, 0, 0};
|
|
1396
|
+
rb_str_cat(str, sz, 4);
|
|
1397
|
+
append_int16_be(str, NUM2INT(i));
|
|
1398
|
+
return str;
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
static VALUE
|
|
1402
|
+
rb_append_int32lesize_int24_le(VALUE self, VALUE str, VALUE i)
|
|
1403
|
+
{
|
|
1404
|
+
char sz[4] = {3, 0, 0, 0};
|
|
1405
|
+
rb_str_cat(str, sz, 4);
|
|
1406
|
+
append_int24_le(str, NUM2INT(i));
|
|
1407
|
+
return str;
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
static VALUE
|
|
1411
|
+
rb_append_int32lesize_int24_be(VALUE self, VALUE str, VALUE i)
|
|
1412
|
+
{
|
|
1413
|
+
char sz[4] = {3, 0, 0, 0};
|
|
1414
|
+
rb_str_cat(str, sz, 4);
|
|
1415
|
+
append_int24_be(str, NUM2INT(i));
|
|
1416
|
+
return str;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
static VALUE
|
|
1420
|
+
rb_append_int32lesize_int32_le(VALUE self, VALUE str, VALUE i)
|
|
1421
|
+
{
|
|
1422
|
+
char sz[4] = {4, 0, 0, 0};
|
|
1423
|
+
rb_str_cat(str, sz, 4);
|
|
1424
|
+
append_int32_le(str, (int32_t)NUM2I64(i));
|
|
1425
|
+
return str;
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
static VALUE
|
|
1429
|
+
rb_append_int32lesize_int32_be(VALUE self, VALUE str, VALUE i)
|
|
1430
|
+
{
|
|
1431
|
+
char sz[4] = {4, 0, 0, 0};
|
|
1432
|
+
rb_str_cat(str, sz, 4);
|
|
1433
|
+
append_int32_be(str, (int32_t)NUM2I64(i));
|
|
1434
|
+
return str;
|
|
1435
|
+
}
|
|
1436
|
+
/*** 32BIT END ***/
|
|
1437
|
+
|
|
1438
|
+
/*** 64BIT ***/
|
|
1439
|
+
static VALUE
|
|
1440
|
+
rb_append_int32lesize_int40_le(VALUE self, VALUE str, VALUE i)
|
|
1441
|
+
{
|
|
1442
|
+
char sz[4] = {5, 0, 0, 0};
|
|
1443
|
+
rb_str_cat(str, sz, 4);
|
|
1444
|
+
append_int40_le(str, NUM2I64(i));
|
|
1445
|
+
return str;
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
static VALUE
|
|
1449
|
+
rb_append_int32lesize_int40_be(VALUE self, VALUE str, VALUE i)
|
|
1450
|
+
{
|
|
1451
|
+
char sz[4] = {5, 0, 0, 0};
|
|
1452
|
+
rb_str_cat(str, sz, 4);
|
|
1453
|
+
append_int40_be(str, NUM2I64(i));
|
|
1454
|
+
return str;
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
static VALUE
|
|
1458
|
+
rb_append_int32lesize_int48_le(VALUE self, VALUE str, VALUE i)
|
|
1459
|
+
{
|
|
1460
|
+
char sz[4] = {6, 0, 0, 0};
|
|
1461
|
+
rb_str_cat(str, sz, 4);
|
|
1462
|
+
append_int48_le(str, NUM2I64(i));
|
|
1463
|
+
return str;
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
static VALUE
|
|
1467
|
+
rb_append_int32lesize_int48_be(VALUE self, VALUE str, VALUE i)
|
|
1468
|
+
{
|
|
1469
|
+
char sz[4] = {6, 0, 0, 0};
|
|
1470
|
+
rb_str_cat(str, sz, 4);
|
|
1471
|
+
append_int48_be(str, NUM2I64(i));
|
|
1472
|
+
return str;
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
static VALUE
|
|
1476
|
+
rb_append_int32lesize_int56_le(VALUE self, VALUE str, VALUE i)
|
|
1477
|
+
{
|
|
1478
|
+
char sz[4] = {7, 0, 0, 0};
|
|
1479
|
+
rb_str_cat(str, sz, 4);
|
|
1480
|
+
append_int56_le(str, NUM2I64(i));
|
|
1481
|
+
return str;
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
static VALUE
|
|
1485
|
+
rb_append_int32lesize_int56_be(VALUE self, VALUE str, VALUE i)
|
|
1486
|
+
{
|
|
1487
|
+
char sz[4] = {7, 0, 0, 0};
|
|
1488
|
+
rb_str_cat(str, sz, 4);
|
|
1489
|
+
append_int56_be(str, NUM2I64(i));
|
|
1490
|
+
return str;
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
static VALUE
|
|
1494
|
+
rb_append_int32lesize_int64_le(VALUE self, VALUE str, VALUE i)
|
|
1495
|
+
{
|
|
1496
|
+
char sz[4] = {8, 0, 0, 0};
|
|
1497
|
+
rb_str_cat(str, sz, 4);
|
|
1498
|
+
append_int64_le(str, safe_int64_t(i));
|
|
1499
|
+
return str;
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
static VALUE
|
|
1503
|
+
rb_append_int32lesize_int64_be(VALUE self, VALUE str, VALUE i)
|
|
1504
|
+
{
|
|
1505
|
+
char sz[4] = {8, 0, 0, 0};
|
|
1506
|
+
rb_str_cat(str, sz, 4);
|
|
1507
|
+
append_int64_be(str, safe_int64_t(i));
|
|
1508
|
+
return str;
|
|
1509
|
+
}
|
|
1510
|
+
/*** 64BIT END **/
|
|
1511
|
+
|
|
1512
|
+
static VALUE
|
|
1513
|
+
rb_append_int32lesize_ber(VALUE self, VALUE str, VALUE i)
|
|
1514
|
+
{
|
|
1515
|
+
char sz[4] = {0,0,0,0};
|
|
1516
|
+
int sl, bl;
|
|
1517
|
+
rb_str_cat(str, sz, 4);
|
|
1518
|
+
sl = RSTRING_LEN(str)-4;
|
|
1519
|
+
bl = append_ber(str, safe_int64_t(i));
|
|
1520
|
+
RSTRING_PTR(str)[sl] = bl;
|
|
1521
|
+
return str;
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
/** APPEND INT32LESIZE END **/
|
|
1525
|
+
|
|
1526
|
+
/** APPEND INT32BESIZE **/
|
|
1527
|
+
/*** 32BIT **/
|
|
1528
|
+
static VALUE
|
|
1529
|
+
rb_append_int32besize_int8(VALUE self, VALUE str, VALUE i)
|
|
1530
|
+
{
|
|
1531
|
+
char sz[4] = {0, 0, 0, 1};
|
|
1532
|
+
rb_str_cat(str, sz, 4);
|
|
1533
|
+
append_int8(str, NUM2INT(i));
|
|
1534
|
+
return str;
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
static VALUE
|
|
1538
|
+
rb_append_int32besize_int16_le(VALUE self, VALUE str, VALUE i)
|
|
1539
|
+
{
|
|
1540
|
+
char sz[4] = {0, 0, 0, 2};
|
|
1541
|
+
rb_str_cat(str, sz, 4);
|
|
1542
|
+
append_int16_le(str, NUM2INT(i));
|
|
1543
|
+
return str;
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
static VALUE
|
|
1547
|
+
rb_append_int32besize_int16_be(VALUE self, VALUE str, VALUE i)
|
|
1548
|
+
{
|
|
1549
|
+
char sz[4] = {0, 0, 0, 2};
|
|
1550
|
+
rb_str_cat(str, sz, 4);
|
|
1551
|
+
append_int16_be(str, NUM2INT(i));
|
|
1552
|
+
return str;
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1555
|
+
static VALUE
|
|
1556
|
+
rb_append_int32besize_int24_le(VALUE self, VALUE str, VALUE i)
|
|
1557
|
+
{
|
|
1558
|
+
char sz[4] = {0, 0, 0, 3};
|
|
1559
|
+
rb_str_cat(str, sz, 4);
|
|
1560
|
+
append_int24_le(str, NUM2INT(i));
|
|
1561
|
+
return str;
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
static VALUE
|
|
1565
|
+
rb_append_int32besize_int24_be(VALUE self, VALUE str, VALUE i)
|
|
1566
|
+
{
|
|
1567
|
+
char sz[4] = {0, 0, 0, 3};
|
|
1568
|
+
rb_str_cat(str, sz, 4);
|
|
1569
|
+
append_int24_be(str, NUM2INT(i));
|
|
1570
|
+
return str;
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
static VALUE
|
|
1574
|
+
rb_append_int32besize_int32_le(VALUE self, VALUE str, VALUE i)
|
|
1575
|
+
{
|
|
1576
|
+
char sz[4] = {0, 0, 0, 4};
|
|
1577
|
+
rb_str_cat(str, sz, 4);
|
|
1578
|
+
append_int32_le(str, (int32_t)NUM2I64(i));
|
|
1579
|
+
return str;
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
static VALUE
|
|
1583
|
+
rb_append_int32besize_int32_be(VALUE self, VALUE str, VALUE i)
|
|
1584
|
+
{
|
|
1585
|
+
char sz[4] = {0, 0, 0, 4};
|
|
1586
|
+
rb_str_cat(str, sz, 4);
|
|
1587
|
+
append_int32_be(str, (int32_t)NUM2I64(i));
|
|
1588
|
+
return str;
|
|
1589
|
+
}
|
|
1590
|
+
/*** 32BIT END ***/
|
|
1591
|
+
|
|
1592
|
+
/*** 64BIT ***/
|
|
1593
|
+
static VALUE
|
|
1594
|
+
rb_append_int32besize_int40_le(VALUE self, VALUE str, VALUE i)
|
|
1595
|
+
{
|
|
1596
|
+
char sz[4] = {0, 0, 0, 5};
|
|
1597
|
+
rb_str_cat(str, sz, 4);
|
|
1598
|
+
append_int40_le(str, NUM2I64(i));
|
|
1599
|
+
return str;
|
|
1600
|
+
}
|
|
1601
|
+
|
|
1602
|
+
static VALUE
|
|
1603
|
+
rb_append_int32besize_int40_be(VALUE self, VALUE str, VALUE i)
|
|
1604
|
+
{
|
|
1605
|
+
char sz[4] = {0, 0, 0, 5};
|
|
1606
|
+
rb_str_cat(str, sz, 4);
|
|
1607
|
+
append_int40_be(str, NUM2I64(i));
|
|
1608
|
+
return str;
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
static VALUE
|
|
1612
|
+
rb_append_int32besize_int48_le(VALUE self, VALUE str, VALUE i)
|
|
1613
|
+
{
|
|
1614
|
+
char sz[4] = {0, 0, 0, 6};
|
|
1615
|
+
rb_str_cat(str, sz, 4);
|
|
1616
|
+
append_int48_le(str, NUM2I64(i));
|
|
1617
|
+
return str;
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1620
|
+
static VALUE
|
|
1621
|
+
rb_append_int32besize_int48_be(VALUE self, VALUE str, VALUE i)
|
|
1622
|
+
{
|
|
1623
|
+
char sz[4] = {0, 0, 0, 6};
|
|
1624
|
+
rb_str_cat(str, sz, 4);
|
|
1625
|
+
append_int48_be(str, NUM2I64(i));
|
|
1626
|
+
return str;
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
static VALUE
|
|
1630
|
+
rb_append_int32besize_int56_le(VALUE self, VALUE str, VALUE i)
|
|
1631
|
+
{
|
|
1632
|
+
char sz[4] = {0, 0, 0, 7};
|
|
1633
|
+
rb_str_cat(str, sz, 4);
|
|
1634
|
+
append_int56_le(str, NUM2I64(i));
|
|
1635
|
+
return str;
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
static VALUE
|
|
1639
|
+
rb_append_int32besize_int56_be(VALUE self, VALUE str, VALUE i)
|
|
1640
|
+
{
|
|
1641
|
+
char sz[4] = {0, 0, 0, 7};
|
|
1642
|
+
rb_str_cat(str, sz, 4);
|
|
1643
|
+
append_int56_be(str, NUM2I64(i));
|
|
1644
|
+
return str;
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1647
|
+
static VALUE
|
|
1648
|
+
rb_append_int32besize_int64_le(VALUE self, VALUE str, VALUE i)
|
|
1649
|
+
{
|
|
1650
|
+
char sz[4] = {0, 0, 0, 8};
|
|
1651
|
+
rb_str_cat(str, sz, 4);
|
|
1652
|
+
append_int64_le(str, safe_int64_t(i));
|
|
1653
|
+
return str;
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1656
|
+
static VALUE
|
|
1657
|
+
rb_append_int32besize_int64_be(VALUE self, VALUE str, VALUE i)
|
|
1658
|
+
{
|
|
1659
|
+
char sz[4] = {0, 0, 0, 8};
|
|
1660
|
+
rb_str_cat(str, sz, 4);
|
|
1661
|
+
append_int64_be(str, safe_int64_t(i));
|
|
1662
|
+
return str;
|
|
1663
|
+
}
|
|
1664
|
+
/*** 64BIT END **/
|
|
1665
|
+
|
|
1666
|
+
static VALUE
|
|
1667
|
+
rb_append_int32besize_ber(VALUE self, VALUE str, VALUE i)
|
|
1668
|
+
{
|
|
1669
|
+
char sz[4] = {0,0,0,0};
|
|
1670
|
+
int sl, bl;
|
|
1671
|
+
rb_str_cat(str, sz, 4);
|
|
1672
|
+
sl = RSTRING_LEN(str)-1;
|
|
1673
|
+
bl = append_ber(str, safe_int64_t(i));
|
|
1674
|
+
RSTRING_PTR(str)[sl] = bl;
|
|
1675
|
+
return str;
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1678
|
+
/** APPEND INT32BESIZE END **/
|
|
1679
|
+
|
|
1680
|
+
/** APPEND STRING **/
|
|
1681
|
+
static VALUE
|
|
1682
|
+
rb_append_string(VALUE self, VALUE str, VALUE add)
|
|
1683
|
+
{
|
|
1684
|
+
StringValue(add);
|
|
1685
|
+
rb_str_cat(str, RSTRING_PTR(add), RSTRING_LEN(add));
|
|
1686
|
+
RB_GC_GUARD(add);
|
|
1687
|
+
return str;
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1690
|
+
static VALUE
|
|
1691
|
+
rb_append_bersize_string(VALUE self, VALUE str, VALUE add)
|
|
1692
|
+
{
|
|
1693
|
+
StringValue(add);
|
|
1694
|
+
append_ber(str, RSTRING_LEN(add));
|
|
1695
|
+
rb_str_cat(str, RSTRING_PTR(add), RSTRING_LEN(add));
|
|
1696
|
+
RB_GC_GUARD(add);
|
|
1697
|
+
return str;
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
static VALUE
|
|
1701
|
+
rb_append_int32lesize_string(VALUE self, VALUE str, VALUE add)
|
|
1702
|
+
{
|
|
1703
|
+
StringValue(add);
|
|
1704
|
+
append_int32_le(str, RSTRING_LEN(add));
|
|
1705
|
+
rb_str_cat(str, RSTRING_PTR(add), RSTRING_LEN(add));
|
|
1706
|
+
RB_GC_GUARD(add);
|
|
1707
|
+
return str;
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
static VALUE
|
|
1711
|
+
rb_append_int32besize_string(VALUE self, VALUE str, VALUE add)
|
|
1712
|
+
{
|
|
1713
|
+
StringValue(add);
|
|
1714
|
+
append_int32_be(str, RSTRING_LEN(add));
|
|
1715
|
+
rb_str_cat(str, RSTRING_PTR(add), RSTRING_LEN(add));
|
|
1716
|
+
RB_GC_GUARD(add);
|
|
1717
|
+
return str;
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1720
|
+
/** APPEND STRING END **/
|
|
1721
|
+
|
|
1722
|
+
void
|
|
1723
|
+
Init_native_bin_utils()
|
|
1724
|
+
{
|
|
1725
|
+
VALUE mod_bin_utils = rb_define_module("BinUtils");
|
|
1726
|
+
VALUE mod_native = rb_define_module_under(mod_bin_utils, "Native");
|
|
1727
|
+
CONST_ID(rshft, ">>");
|
|
1728
|
+
CONST_ID(band, "&");
|
|
1729
|
+
|
|
1730
|
+
rb_define_method(mod_native, "get_ber", rb_get_ber, -1);
|
|
1731
|
+
rb_define_method(mod_native, "get_int8", rb_get_int8, -1);
|
|
1732
|
+
rb_define_method(mod_native, "get_sint8", rb_get_sint8, -1);
|
|
1733
|
+
rb_define_method(mod_native, "get_int16_le", rb_get_int16_le, -1);
|
|
1734
|
+
rb_define_method(mod_native, "get_sint16_le", rb_get_sint16_le, -1);
|
|
1735
|
+
rb_define_method(mod_native, "get_int16_be", rb_get_int16_be, -1);
|
|
1736
|
+
rb_define_method(mod_native, "get_sint16_be", rb_get_sint16_be, -1);
|
|
1737
|
+
rb_define_method(mod_native, "get_int24_le", rb_get_int24_le, -1);
|
|
1738
|
+
rb_define_method(mod_native, "get_sint24_le", rb_get_sint24_le, -1);
|
|
1739
|
+
rb_define_method(mod_native, "get_int24_be", rb_get_int24_be, -1);
|
|
1740
|
+
rb_define_method(mod_native, "get_sint24_be", rb_get_sint24_be, -1);
|
|
1741
|
+
rb_define_method(mod_native, "get_int32_le", rb_get_int32_le, -1);
|
|
1742
|
+
rb_define_method(mod_native, "get_sint32_le", rb_get_sint32_le, -1);
|
|
1743
|
+
rb_define_method(mod_native, "get_int32_be", rb_get_int32_be, -1);
|
|
1744
|
+
rb_define_method(mod_native, "get_sint32_be", rb_get_sint32_be, -1);
|
|
1745
|
+
rb_define_method(mod_native, "get_int40_le", rb_get_int40_le, -1);
|
|
1746
|
+
rb_define_method(mod_native, "get_sint40_le", rb_get_sint40_le, -1);
|
|
1747
|
+
rb_define_method(mod_native, "get_int40_be", rb_get_int40_be, -1);
|
|
1748
|
+
rb_define_method(mod_native, "get_sint40_be", rb_get_sint40_be, -1);
|
|
1749
|
+
rb_define_method(mod_native, "get_int48_le", rb_get_int48_le, -1);
|
|
1750
|
+
rb_define_method(mod_native, "get_sint48_le", rb_get_sint48_le, -1);
|
|
1751
|
+
rb_define_method(mod_native, "get_int48_be", rb_get_int48_be, -1);
|
|
1752
|
+
rb_define_method(mod_native, "get_sint48_be", rb_get_sint48_be, -1);
|
|
1753
|
+
rb_define_method(mod_native, "get_int56_le", rb_get_int56_le, -1);
|
|
1754
|
+
rb_define_method(mod_native, "get_sint56_le", rb_get_sint56_le, -1);
|
|
1755
|
+
rb_define_method(mod_native, "get_int56_be", rb_get_int56_be, -1);
|
|
1756
|
+
rb_define_method(mod_native, "get_sint56_be", rb_get_sint56_be, -1);
|
|
1757
|
+
rb_define_method(mod_native, "get_int64_le", rb_get_int64_le, -1);
|
|
1758
|
+
rb_define_method(mod_native, "get_sint64_le", rb_get_sint64_le, -1);
|
|
1759
|
+
rb_define_method(mod_native, "get_int64_be", rb_get_int64_be, -1);
|
|
1760
|
+
rb_define_method(mod_native, "get_sint64_be", rb_get_sint64_be, -1);
|
|
1761
|
+
|
|
1762
|
+
rb_define_method(mod_native, "slice_ber!", rb_slice_ber, 1);
|
|
1763
|
+
rb_define_method(mod_native, "slice_int8!", rb_slice_int8, 1);
|
|
1764
|
+
rb_define_method(mod_native, "slice_sint8!", rb_slice_sint8, 1);
|
|
1765
|
+
rb_define_method(mod_native, "slice_int16_le!", rb_slice_int16_le, 1);
|
|
1766
|
+
rb_define_method(mod_native, "slice_sint16_le!", rb_slice_sint16_le, 1);
|
|
1767
|
+
rb_define_method(mod_native, "slice_int16_be!", rb_slice_int16_be, 1);
|
|
1768
|
+
rb_define_method(mod_native, "slice_sint16_be!", rb_slice_sint16_be, 1);
|
|
1769
|
+
rb_define_method(mod_native, "slice_int24_le!", rb_slice_int24_le, 1);
|
|
1770
|
+
rb_define_method(mod_native, "slice_sint24_le!", rb_slice_sint24_le, 1);
|
|
1771
|
+
rb_define_method(mod_native, "slice_int24_be!", rb_slice_int24_be, 1);
|
|
1772
|
+
rb_define_method(mod_native, "slice_sint24_be!", rb_slice_sint24_be, 1);
|
|
1773
|
+
rb_define_method(mod_native, "slice_int32_le!", rb_slice_int32_le, 1);
|
|
1774
|
+
rb_define_method(mod_native, "slice_sint32_le!", rb_slice_sint32_le, 1);
|
|
1775
|
+
rb_define_method(mod_native, "slice_int32_be!", rb_slice_int32_be, 1);
|
|
1776
|
+
rb_define_method(mod_native, "slice_sint32_be!", rb_slice_sint32_be, 1);
|
|
1777
|
+
rb_define_method(mod_native, "slice_int40_le!", rb_slice_int40_le, 1);
|
|
1778
|
+
rb_define_method(mod_native, "slice_sint40_le!", rb_slice_sint40_le, 1);
|
|
1779
|
+
rb_define_method(mod_native, "slice_int40_be!", rb_slice_int40_be, 1);
|
|
1780
|
+
rb_define_method(mod_native, "slice_sint40_be!", rb_slice_sint40_be, 1);
|
|
1781
|
+
rb_define_method(mod_native, "slice_int48_le!", rb_slice_int48_le, 1);
|
|
1782
|
+
rb_define_method(mod_native, "slice_sint48_le!", rb_slice_sint48_le, 1);
|
|
1783
|
+
rb_define_method(mod_native, "slice_int48_be!", rb_slice_int48_be, 1);
|
|
1784
|
+
rb_define_method(mod_native, "slice_sint48_be!", rb_slice_sint48_be, 1);
|
|
1785
|
+
rb_define_method(mod_native, "slice_int56_le!", rb_slice_int56_le, 1);
|
|
1786
|
+
rb_define_method(mod_native, "slice_sint56_le!", rb_slice_sint56_le, 1);
|
|
1787
|
+
rb_define_method(mod_native, "slice_int56_be!", rb_slice_int56_be, 1);
|
|
1788
|
+
rb_define_method(mod_native, "slice_sint56_be!", rb_slice_sint56_be, 1);
|
|
1789
|
+
rb_define_method(mod_native, "slice_int64_le!", rb_slice_int64_le, 1);
|
|
1790
|
+
rb_define_method(mod_native, "slice_sint64_le!", rb_slice_sint64_le, 1);
|
|
1791
|
+
rb_define_method(mod_native, "slice_int64_be!", rb_slice_int64_be, 1);
|
|
1792
|
+
rb_define_method(mod_native, "slice_sint64_be!", rb_slice_sint64_be, 1);
|
|
1793
|
+
|
|
1794
|
+
rb_define_method(mod_native, "append_ber!", rb_append_ber, 2);
|
|
1795
|
+
rb_define_method(mod_native, "append_int8!", rb_append_int8, 2);
|
|
1796
|
+
rb_define_method(mod_native, "append_sint8!", rb_append_int8, 2);
|
|
1797
|
+
rb_define_method(mod_native, "append_int16_le!", rb_append_int16_le, 2);
|
|
1798
|
+
rb_define_method(mod_native, "append_sint16_le!", rb_append_int16_le, 2);
|
|
1799
|
+
rb_define_method(mod_native, "append_int16_be!", rb_append_int16_be, 2);
|
|
1800
|
+
rb_define_method(mod_native, "append_sint16_be!", rb_append_int16_be, 2);
|
|
1801
|
+
rb_define_method(mod_native, "append_int24_le!", rb_append_int24_le, 2);
|
|
1802
|
+
rb_define_method(mod_native, "append_sint24_le!", rb_append_int24_le, 2);
|
|
1803
|
+
rb_define_method(mod_native, "append_int24_be!", rb_append_int24_be, 2);
|
|
1804
|
+
rb_define_method(mod_native, "append_sint24_be!", rb_append_int24_be, 2);
|
|
1805
|
+
rb_define_method(mod_native, "append_int32_le!", rb_append_int32_le, 2);
|
|
1806
|
+
rb_define_method(mod_native, "append_sint32_le!", rb_append_int32_le, 2);
|
|
1807
|
+
rb_define_method(mod_native, "append_int32_be!", rb_append_int32_be, 2);
|
|
1808
|
+
rb_define_method(mod_native, "append_sint32_be!", rb_append_int32_be, 2);
|
|
1809
|
+
rb_define_method(mod_native, "append_int40_le!", rb_append_int40_le, 2);
|
|
1810
|
+
rb_define_method(mod_native, "append_sint40_le!", rb_append_int40_le, 2);
|
|
1811
|
+
rb_define_method(mod_native, "append_int40_be!", rb_append_int40_be, 2);
|
|
1812
|
+
rb_define_method(mod_native, "append_sint40_be!", rb_append_int40_be, 2);
|
|
1813
|
+
rb_define_method(mod_native, "append_int48_le!", rb_append_int48_le, 2);
|
|
1814
|
+
rb_define_method(mod_native, "append_sint48_le!", rb_append_int48_le, 2);
|
|
1815
|
+
rb_define_method(mod_native, "append_int48_be!", rb_append_int48_be, 2);
|
|
1816
|
+
rb_define_method(mod_native, "append_sint48_be!", rb_append_int48_be, 2);
|
|
1817
|
+
rb_define_method(mod_native, "append_int56_le!", rb_append_int56_le, 2);
|
|
1818
|
+
rb_define_method(mod_native, "append_sint56_le!", rb_append_int56_le, 2);
|
|
1819
|
+
rb_define_method(mod_native, "append_int56_be!", rb_append_int56_be, 2);
|
|
1820
|
+
rb_define_method(mod_native, "append_sint56_be!", rb_append_int56_be, 2);
|
|
1821
|
+
rb_define_method(mod_native, "append_int64_le!", rb_append_int64_le, 2);
|
|
1822
|
+
rb_define_method(mod_native, "append_sint64_le!", rb_append_int64_le, 2);
|
|
1823
|
+
rb_define_method(mod_native, "append_int64_be!", rb_append_int64_be, 2);
|
|
1824
|
+
rb_define_method(mod_native, "append_sint64_be!", rb_append_int64_be, 2);
|
|
1825
|
+
|
|
1826
|
+
rb_define_method(mod_native, "append_bersize_ber!", rb_append_bersize_ber, 2);
|
|
1827
|
+
rb_define_method(mod_native, "append_bersize_int8!", rb_append_bersize_int8, 2);
|
|
1828
|
+
rb_define_method(mod_native, "append_bersize_sint8!", rb_append_bersize_int8, 2);
|
|
1829
|
+
rb_define_method(mod_native, "append_bersize_int16_le!", rb_append_bersize_int16_le, 2);
|
|
1830
|
+
rb_define_method(mod_native, "append_bersize_sint16_le!", rb_append_bersize_int16_le, 2);
|
|
1831
|
+
rb_define_method(mod_native, "append_bersize_int16_be!", rb_append_bersize_int16_be, 2);
|
|
1832
|
+
rb_define_method(mod_native, "append_bersize_sint16_be!", rb_append_bersize_int16_be, 2);
|
|
1833
|
+
rb_define_method(mod_native, "append_bersize_int24_le!", rb_append_bersize_int24_le, 2);
|
|
1834
|
+
rb_define_method(mod_native, "append_bersize_sint24_le!", rb_append_bersize_int24_le, 2);
|
|
1835
|
+
rb_define_method(mod_native, "append_bersize_int24_be!", rb_append_bersize_int24_be, 2);
|
|
1836
|
+
rb_define_method(mod_native, "append_bersize_sint24_be!", rb_append_bersize_int24_be, 2);
|
|
1837
|
+
rb_define_method(mod_native, "append_bersize_int32_le!", rb_append_bersize_int32_le, 2);
|
|
1838
|
+
rb_define_method(mod_native, "append_bersize_sint32_le!", rb_append_bersize_int32_le, 2);
|
|
1839
|
+
rb_define_method(mod_native, "append_bersize_int32_be!", rb_append_bersize_int32_be, 2);
|
|
1840
|
+
rb_define_method(mod_native, "append_bersize_sint32_be!", rb_append_bersize_int32_be, 2);
|
|
1841
|
+
rb_define_method(mod_native, "append_bersize_int40_le!", rb_append_bersize_int40_le, 2);
|
|
1842
|
+
rb_define_method(mod_native, "append_bersize_sint40_le!", rb_append_bersize_int40_le, 2);
|
|
1843
|
+
rb_define_method(mod_native, "append_bersize_int40_be!", rb_append_bersize_int40_be, 2);
|
|
1844
|
+
rb_define_method(mod_native, "append_bersize_sint40_be!", rb_append_bersize_int40_be, 2);
|
|
1845
|
+
rb_define_method(mod_native, "append_bersize_int48_le!", rb_append_bersize_int48_le, 2);
|
|
1846
|
+
rb_define_method(mod_native, "append_bersize_sint48_le!", rb_append_bersize_int48_le, 2);
|
|
1847
|
+
rb_define_method(mod_native, "append_bersize_int48_be!", rb_append_bersize_int48_be, 2);
|
|
1848
|
+
rb_define_method(mod_native, "append_bersize_sint48_be!", rb_append_bersize_int48_be, 2);
|
|
1849
|
+
rb_define_method(mod_native, "append_bersize_int56_le!", rb_append_bersize_int56_le, 2);
|
|
1850
|
+
rb_define_method(mod_native, "append_bersize_sint56_le!", rb_append_bersize_int56_le, 2);
|
|
1851
|
+
rb_define_method(mod_native, "append_bersize_int56_be!", rb_append_bersize_int56_be, 2);
|
|
1852
|
+
rb_define_method(mod_native, "append_bersize_sint56_be!", rb_append_bersize_int56_be, 2);
|
|
1853
|
+
rb_define_method(mod_native, "append_bersize_int64_le!", rb_append_bersize_int64_le, 2);
|
|
1854
|
+
rb_define_method(mod_native, "append_bersize_sint64_le!", rb_append_bersize_int64_le, 2);
|
|
1855
|
+
rb_define_method(mod_native, "append_bersize_int64_be!", rb_append_bersize_int64_be, 2);
|
|
1856
|
+
rb_define_method(mod_native, "append_bersize_sint64_be!", rb_append_bersize_int64_be, 2);
|
|
1857
|
+
|
|
1858
|
+
rb_define_method(mod_native, "append_int32lesize_ber!", rb_append_int32lesize_ber, 2);
|
|
1859
|
+
rb_define_method(mod_native, "append_int32lesize_int8!", rb_append_int32lesize_int8, 2);
|
|
1860
|
+
rb_define_method(mod_native, "append_int32lesize_sint8!", rb_append_int32lesize_int8, 2);
|
|
1861
|
+
rb_define_method(mod_native, "append_int32lesize_int16_le!", rb_append_int32lesize_int16_le, 2);
|
|
1862
|
+
rb_define_method(mod_native, "append_int32lesize_sint16_le!", rb_append_int32lesize_int16_le, 2);
|
|
1863
|
+
rb_define_method(mod_native, "append_int32lesize_int16_be!", rb_append_int32lesize_int16_be, 2);
|
|
1864
|
+
rb_define_method(mod_native, "append_int32lesize_sint16_be!", rb_append_int32lesize_int16_be, 2);
|
|
1865
|
+
rb_define_method(mod_native, "append_int32lesize_int24_le!", rb_append_int32lesize_int24_le, 2);
|
|
1866
|
+
rb_define_method(mod_native, "append_int32lesize_sint24_le!", rb_append_int32lesize_int24_le, 2);
|
|
1867
|
+
rb_define_method(mod_native, "append_int32lesize_int24_be!", rb_append_int32lesize_int24_be, 2);
|
|
1868
|
+
rb_define_method(mod_native, "append_int32lesize_sint24_be!", rb_append_int32lesize_int24_be, 2);
|
|
1869
|
+
rb_define_method(mod_native, "append_int32lesize_int32_le!", rb_append_int32lesize_int32_le, 2);
|
|
1870
|
+
rb_define_method(mod_native, "append_int32lesize_sint32_le!", rb_append_int32lesize_int32_le, 2);
|
|
1871
|
+
rb_define_method(mod_native, "append_int32lesize_int32_be!", rb_append_int32lesize_int32_be, 2);
|
|
1872
|
+
rb_define_method(mod_native, "append_int32lesize_sint32_be!", rb_append_int32lesize_int32_be, 2);
|
|
1873
|
+
rb_define_method(mod_native, "append_int32lesize_int40_le!", rb_append_int32lesize_int40_le, 2);
|
|
1874
|
+
rb_define_method(mod_native, "append_int32lesize_sint40_le!", rb_append_int32lesize_int40_le, 2);
|
|
1875
|
+
rb_define_method(mod_native, "append_int32lesize_int40_be!", rb_append_int32lesize_int40_be, 2);
|
|
1876
|
+
rb_define_method(mod_native, "append_int32lesize_sint40_be!", rb_append_int32lesize_int40_be, 2);
|
|
1877
|
+
rb_define_method(mod_native, "append_int32lesize_int48_le!", rb_append_int32lesize_int48_le, 2);
|
|
1878
|
+
rb_define_method(mod_native, "append_int32lesize_sint48_le!", rb_append_int32lesize_int48_le, 2);
|
|
1879
|
+
rb_define_method(mod_native, "append_int32lesize_int48_be!", rb_append_int32lesize_int48_be, 2);
|
|
1880
|
+
rb_define_method(mod_native, "append_int32lesize_sint48_be!", rb_append_int32lesize_int48_be, 2);
|
|
1881
|
+
rb_define_method(mod_native, "append_int32lesize_int56_le!", rb_append_int32lesize_int56_le, 2);
|
|
1882
|
+
rb_define_method(mod_native, "append_int32lesize_sint56_le!", rb_append_int32lesize_int56_le, 2);
|
|
1883
|
+
rb_define_method(mod_native, "append_int32lesize_int56_be!", rb_append_int32lesize_int56_be, 2);
|
|
1884
|
+
rb_define_method(mod_native, "append_int32lesize_sint56_be!", rb_append_int32lesize_int56_be, 2);
|
|
1885
|
+
rb_define_method(mod_native, "append_int32lesize_int64_le!", rb_append_int32lesize_int64_le, 2);
|
|
1886
|
+
rb_define_method(mod_native, "append_int32lesize_sint64_le!", rb_append_int32lesize_int64_le, 2);
|
|
1887
|
+
rb_define_method(mod_native, "append_int32lesize_int64_be!", rb_append_int32lesize_int64_be, 2);
|
|
1888
|
+
rb_define_method(mod_native, "append_int32lesize_sint64_be!", rb_append_int32lesize_int64_be, 2);
|
|
1889
|
+
|
|
1890
|
+
rb_define_method(mod_native, "append_int32besize_ber!", rb_append_int32besize_ber, 2);
|
|
1891
|
+
rb_define_method(mod_native, "append_int32besize_int8!", rb_append_int32besize_int8, 2);
|
|
1892
|
+
rb_define_method(mod_native, "append_int32besize_sint8!", rb_append_int32besize_int8, 2);
|
|
1893
|
+
rb_define_method(mod_native, "append_int32besize_int16_le!", rb_append_int32besize_int16_le, 2);
|
|
1894
|
+
rb_define_method(mod_native, "append_int32besize_sint16_le!", rb_append_int32besize_int16_le, 2);
|
|
1895
|
+
rb_define_method(mod_native, "append_int32besize_int16_be!", rb_append_int32besize_int16_be, 2);
|
|
1896
|
+
rb_define_method(mod_native, "append_int32besize_sint16_be!", rb_append_int32besize_int16_be, 2);
|
|
1897
|
+
rb_define_method(mod_native, "append_int32besize_int24_le!", rb_append_int32besize_int24_le, 2);
|
|
1898
|
+
rb_define_method(mod_native, "append_int32besize_sint24_le!", rb_append_int32besize_int24_le, 2);
|
|
1899
|
+
rb_define_method(mod_native, "append_int32besize_int24_be!", rb_append_int32besize_int24_be, 2);
|
|
1900
|
+
rb_define_method(mod_native, "append_int32besize_sint24_be!", rb_append_int32besize_int24_be, 2);
|
|
1901
|
+
rb_define_method(mod_native, "append_int32besize_int32_le!", rb_append_int32besize_int32_le, 2);
|
|
1902
|
+
rb_define_method(mod_native, "append_int32besize_sint32_le!", rb_append_int32besize_int32_le, 2);
|
|
1903
|
+
rb_define_method(mod_native, "append_int32besize_int32_be!", rb_append_int32besize_int32_be, 2);
|
|
1904
|
+
rb_define_method(mod_native, "append_int32besize_sint32_be!", rb_append_int32besize_int32_be, 2);
|
|
1905
|
+
rb_define_method(mod_native, "append_int32besize_int40_le!", rb_append_int32besize_int40_le, 2);
|
|
1906
|
+
rb_define_method(mod_native, "append_int32besize_sint40_le!", rb_append_int32besize_int40_le, 2);
|
|
1907
|
+
rb_define_method(mod_native, "append_int32besize_int40_be!", rb_append_int32besize_int40_be, 2);
|
|
1908
|
+
rb_define_method(mod_native, "append_int32besize_sint40_be!", rb_append_int32besize_int40_be, 2);
|
|
1909
|
+
rb_define_method(mod_native, "append_int32besize_int48_le!", rb_append_int32besize_int48_le, 2);
|
|
1910
|
+
rb_define_method(mod_native, "append_int32besize_sint48_le!", rb_append_int32besize_int48_le, 2);
|
|
1911
|
+
rb_define_method(mod_native, "append_int32besize_int48_be!", rb_append_int32besize_int48_be, 2);
|
|
1912
|
+
rb_define_method(mod_native, "append_int32besize_sint48_be!", rb_append_int32besize_int48_be, 2);
|
|
1913
|
+
rb_define_method(mod_native, "append_int32besize_int56_le!", rb_append_int32besize_int56_le, 2);
|
|
1914
|
+
rb_define_method(mod_native, "append_int32besize_sint56_le!", rb_append_int32besize_int56_le, 2);
|
|
1915
|
+
rb_define_method(mod_native, "append_int32besize_int56_be!", rb_append_int32besize_int56_be, 2);
|
|
1916
|
+
rb_define_method(mod_native, "append_int32besize_sint56_be!", rb_append_int32besize_int56_be, 2);
|
|
1917
|
+
rb_define_method(mod_native, "append_int32besize_int64_le!", rb_append_int32besize_int64_le, 2);
|
|
1918
|
+
rb_define_method(mod_native, "append_int32besize_sint64_le!", rb_append_int32besize_int64_le, 2);
|
|
1919
|
+
rb_define_method(mod_native, "append_int32besize_int64_be!", rb_append_int32besize_int64_be, 2);
|
|
1920
|
+
rb_define_method(mod_native, "append_int32besize_sint64_be!", rb_append_int32besize_int64_be, 2);
|
|
1921
|
+
|
|
1922
|
+
rb_define_method(mod_native, "append_string!", rb_append_string, 2);
|
|
1923
|
+
rb_define_method(mod_native, "append_bersize_string!", rb_append_bersize_string, 2);
|
|
1924
|
+
rb_define_method(mod_native, "append_int32lesize_string!", rb_append_int32lesize_string, 2);
|
|
1925
|
+
rb_define_method(mod_native, "append_int32besize_string!", rb_append_int32besize_string, 2);
|
|
1926
|
+
|
|
1927
|
+
rb_extend_object(mod_native, mod_native);
|
|
1928
|
+
}
|