sereal 0.0.11 → 0.0.12
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.
- checksums.yaml +4 -4
- data/ext/sereal/decode.c +1 -5
- data/ext/sereal/encode.c +34 -22
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93b2d3dcf39684fbf9fd094b94b4d78227bc0877
|
4
|
+
data.tar.gz: ce21c8d417fcf323d316e3364fdabb3f4d35def5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc1d1ff34c241d8d9a31a4e3d9bf97683e0517cac457e97cb385d5656f0f07e436c029d09691736fd8909948ad2e85fcd285b7d27e6b3773e81fbbad783a5787
|
7
|
+
data.tar.gz: c3e9c73be0841b2beb34958b2972701604bbd7d3d014f1fdbcdd56612aef46614d6cf8b9d474a080a78f0b52dbcdb0fb27033bfce0caf9a3c06815fda4fefc85
|
data/ext/sereal/decode.c
CHANGED
@@ -26,11 +26,7 @@ static u64 s_get_varint_bang(sereal_t *s) {
|
|
26
26
|
static VALUE s_read_zigzag(sereal_t *s, u8 tag) {
|
27
27
|
signed long long z = 0;
|
28
28
|
u64 v = s_get_varint_bang(s);
|
29
|
-
|
30
|
-
z = ((long) v >> 1);
|
31
|
-
} else {
|
32
|
-
z = (long) v >> 1;
|
33
|
-
}
|
29
|
+
z = (v >> 1) ^ -(v & 0x01);
|
34
30
|
return LL2NUM(z);
|
35
31
|
}
|
36
32
|
|
data/ext/sereal/encode.c
CHANGED
@@ -41,7 +41,7 @@ void (*WRITER[W_SIZE])(sereal_t *,VALUE);
|
|
41
41
|
static void rb_object_to_sereal(sereal_t *s, VALUE object);
|
42
42
|
static void s_append_varint(sereal_t *s,u64 n);
|
43
43
|
static void s_append_hdr_with_varint(sereal_t *s,u8 hdr, u64 n);
|
44
|
-
static void s_append_zigzag(sereal_t *s,
|
44
|
+
static void s_append_zigzag(sereal_t *s,long long n);
|
45
45
|
static void s_append_string(sereal_t *s,u8 *string, u32 len,u8 is_utf8);
|
46
46
|
static void s_append_rb_string(sereal_t *s, VALUE object);
|
47
47
|
static void s_append_array(sereal_t *s, VALUE object);
|
@@ -49,7 +49,8 @@ static void s_append_hash(sereal_t *s, VALUE object);
|
|
49
49
|
static void s_append_symbol(sereal_t *s, VALUE object);
|
50
50
|
static void s_append_object(sereal_t *s, VALUE object);
|
51
51
|
static void s_append_regexp(sereal_t *s, VALUE object);
|
52
|
-
static void
|
52
|
+
static void s_append_bignum(sereal_t *s, VALUE object);
|
53
|
+
static void s_append_fixnum(sereal_t *s, VALUE object);
|
53
54
|
static void s_append_double(sereal_t *s, VALUE object);
|
54
55
|
static void s_append_true(sereal_t *s, VALUE object);
|
55
56
|
static void s_append_false(sereal_t *s, VALUE object);
|
@@ -61,8 +62,8 @@ void s_init_writers(void) {
|
|
61
62
|
for (i = 0; i < sizeof(WRITER)/sizeof(WRITER[0]); i++)
|
62
63
|
WRITER[i] = s_default_writer;
|
63
64
|
|
64
|
-
WRITER[T_FIXNUM] =
|
65
|
-
WRITER[T_BIGNUM] =
|
65
|
+
WRITER[T_FIXNUM] = s_append_fixnum;
|
66
|
+
WRITER[T_BIGNUM] = s_append_bignum;
|
66
67
|
WRITER[T_FLOAT] = s_append_double;
|
67
68
|
WRITER[T_OBJECT] = s_append_object;
|
68
69
|
WRITER[T_REGEXP] = s_append_regexp;
|
@@ -93,9 +94,8 @@ static inline void s_append_hdr_with_varint(sereal_t *s,u8 hdr, u64 n) {
|
|
93
94
|
s_append_varint(s,n);
|
94
95
|
}
|
95
96
|
|
96
|
-
static inline void s_append_zigzag(sereal_t *s,
|
97
|
-
s_append_hdr_with_varint(s,SRL_HDR_ZIGZAG,
|
98
|
-
(n << 1) ^ (n >> (sizeof(long) * 8 - 1)));
|
97
|
+
static inline void s_append_zigzag(sereal_t *s,long long n) {
|
98
|
+
s_append_hdr_with_varint(s,SRL_HDR_ZIGZAG,(n << 1) ^ (n >> 63));
|
99
99
|
}
|
100
100
|
|
101
101
|
static inline void s_append_string(sereal_t *s,u8 *string, u32 len,u8 is_utf8) {
|
@@ -230,25 +230,37 @@ static void s_append_regexp(sereal_t *s, VALUE object) {
|
|
230
230
|
s_append_rb_string(s,f);
|
231
231
|
}
|
232
232
|
|
233
|
+
#define I_APPEND(_v) \
|
234
|
+
do { \
|
235
|
+
if (_v >= 0) { \
|
236
|
+
if (_v < 16) \
|
237
|
+
s_append_u8(s,SRL_HDR_POS_LOW | (u8) _v); \
|
238
|
+
else \
|
239
|
+
s_append_hdr_with_varint(s,SRL_HDR_VARINT,_v); \
|
240
|
+
} else { \
|
241
|
+
if (_v > -17) \
|
242
|
+
s_append_u8(s,SRL_HDR_NEG_LOW | ((u8) _v + 32)); \
|
243
|
+
else \
|
244
|
+
s_append_zigzag(s,_v); \
|
245
|
+
} \
|
246
|
+
} while(0)
|
247
|
+
|
248
|
+
static void s_append_fixnum(sereal_t *s, VALUE object) {
|
249
|
+
long long v = FIXNUM_P(object) ? FIX2LONG(object) : NUM2LL(object);
|
250
|
+
I_APPEND(v);
|
251
|
+
}
|
233
252
|
|
234
|
-
static void
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
s_append_u8(s,SRL_HDR_POS_LOW | (u8) v);
|
239
|
-
else {
|
240
|
-
if (!FIXNUM_P(object))
|
241
|
-
s_append_hdr_with_varint(s,SRL_HDR_VARINT,NUM2ULL(object));
|
242
|
-
else
|
243
|
-
s_append_hdr_with_varint(s,SRL_HDR_VARINT,v);
|
244
|
-
}
|
253
|
+
static void s_append_bignum(sereal_t *s, VALUE object) {
|
254
|
+
if (RBIGNUM_POSITIVE_P(object)) {
|
255
|
+
unsigned long long uv = rb_big2ull(object);
|
256
|
+
I_APPEND(uv);
|
245
257
|
} else {
|
246
|
-
|
247
|
-
|
248
|
-
else
|
249
|
-
s_append_zigzag(s,v);
|
258
|
+
long long v = rb_big2ll(object);
|
259
|
+
I_APPEND(v);
|
250
260
|
}
|
251
261
|
}
|
262
|
+
#undef I_APPEND
|
263
|
+
|
252
264
|
static void s_append_double(sereal_t *s, VALUE object) {
|
253
265
|
double d = NUM2DBL(object);
|
254
266
|
s_append_u8(s,SRL_HDR_DOUBLE);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sereal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Borislav Nikolov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|