sereal 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,301 @@
1
+ /*
2
+ Copyright 2011 Google Inc. All Rights Reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are
6
+ met:
7
+
8
+ * Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+ * Redistributions in binary form must reproduce the above
11
+ copyright notice, this list of conditions and the following disclaimer
12
+ in the documentation and/or other materials provided with the
13
+ distribution.
14
+ * Neither the name of Google Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from
16
+ this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ Various stubs for the open-source version of Snappy.
31
+
32
+ File modified by
33
+ Zeev Tarantov <zeev.tarantov@gmail.com>
34
+ */
35
+
36
+ #ifndef CSNAPPY_INTERNAL_USERSPACE_H_
37
+ #define CSNAPPY_INTERNAL_USERSPACE_H_
38
+
39
+ #if defined(_MSC_VER) && (_MSC_VER <= 1300)
40
+ typedef unsigned __int8 uint8_t;
41
+ typedef unsigned __int16 uint16_t;
42
+ typedef unsigned __int32 uint32_t;
43
+ typedef unsigned __int64 uint64_t;
44
+ #else
45
+ #include <stdint.h>
46
+ #endif
47
+
48
+ #ifdef _GNU_SOURCE
49
+ #define min(x, y) (__extension__ ({ \
50
+ typeof(x) _min1 = (x); \
51
+ typeof(y) _min2 = (y); \
52
+ (void) (&_min1 == &_min2); \
53
+ _min1 < _min2 ? _min1 : _min2; }))
54
+ #else
55
+ #define min(x, y) (((x) < (y)) ? (x) : (y))
56
+ #endif
57
+
58
+ /* Static prediction hints. */
59
+ #ifndef __GNUC__
60
+ #define __builtin_expect(a,b) a
61
+ #endif
62
+ #define likely(x) __builtin_expect(!!(x), 1)
63
+ #define unlikely(x) __builtin_expect(!!(x), 0)
64
+
65
+
66
+ #ifdef DEBUG
67
+ #include <assert.h>
68
+ #define DCHECK(cond) assert(cond)
69
+ #else
70
+ #define DCHECK(cond)
71
+ #endif
72
+
73
+ /*
74
+ Uses code from http://code.google.com/p/exfat/source/browse/trunk/libexfat/byteorder.h
75
+ with 3-clause BSD license instead of GPL, with permission from:
76
+ Andrew Nayenko
77
+ Albert Lee
78
+ */
79
+ #if defined(_MSC_VER)
80
+
81
+ #include <stdlib.h>
82
+ #define bswap_16(x) _byteswap_ushort(x)
83
+ #define bswap_32(x) _byteswap_ulong(x)
84
+ #define bswap_64(x) _byteswap_uint64(x)
85
+
86
+ #elif defined(__GLIBC__) || defined(__ANDROID__) || defined(__CYGWIN__)
87
+
88
+ #include <endian.h>
89
+ #include <byteswap.h>
90
+
91
+ #elif defined(__APPLE__)
92
+
93
+ #include <machine/endian.h>
94
+ #include <libkern/OSByteOrder.h>
95
+ #define bswap_16(x) OSSwapInt16(x)
96
+ #define bswap_32(x) OSSwapInt32(x)
97
+ #define bswap_64(x) OSSwapInt64(x)
98
+ #define __BYTE_ORDER BYTE_ORDER
99
+ #define __LITTLE_ENDIAN LITTLE_ENDIAN
100
+ #define __BIG_ENDIAN BIG_ENDIAN
101
+
102
+ #elif defined(__FreeBSD__) || defined(__DragonFlyBSD__) || defined(__NetBSD__)
103
+
104
+ #include <sys/endian.h>
105
+ #define bswap_16(x) bswap16(x)
106
+ #define bswap_32(x) bswap32(x)
107
+ #define bswap_64(x) bswap64(x)
108
+ #define __BYTE_ORDER _BYTE_ORDER
109
+ #define __LITTLE_ENDIAN _LITTLE_ENDIAN
110
+ #define __BIG_ENDIAN _BIG_ENDIAN
111
+
112
+ #elif defined(__OpenBSD__)
113
+
114
+ #include <machine/endian.h>
115
+ #define bswap_16(x) swap16(x)
116
+ #define bswap_32(x) swap32(x)
117
+ #define bswap_64(x) swap64(x)
118
+ #define __BYTE_ORDER _BYTE_ORDER
119
+ #define __LITTLE_ENDIAN _LITTLE_ENDIAN
120
+ #define __BIG_ENDIAN _BIG_ENDIAN
121
+
122
+ #elif defined(__sun)
123
+
124
+ #include <sys/byteorder.h>
125
+ #define bswap_16(x) BSWAP_16(x)
126
+ #define bswap_32(x) BSWAP_32(x)
127
+ #define bswap_64(x) BSWAP_64(x)
128
+ #define __LITTLE_ENDIAN 1234
129
+ #define __BIG_ENDIAN 4321
130
+ #ifdef _LITTLE_ENDIAN
131
+ #define __BYTE_ORDER __LITTLE_ENDIAN
132
+ #else
133
+ #define __BYTE_ORDER __BIG_ENDIAN
134
+ #endif
135
+
136
+ #endif
137
+
138
+
139
+ /* Potentially unaligned loads and stores. */
140
+
141
+ #if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__)
142
+
143
+ #define UNALIGNED_LOAD16(_p) (*(const uint16_t*)(_p))
144
+ #define UNALIGNED_LOAD32(_p) (*(const uint32_t*)(_p))
145
+ #define UNALIGNED_LOAD64(_p) (*(const uint64_t*)(_p))
146
+
147
+ #define UNALIGNED_STORE16(_p, _val) (*(uint16_t*)(_p) = (_val))
148
+ #define UNALIGNED_STORE32(_p, _val) (*(uint32_t*)(_p) = (_val))
149
+ #define UNALIGNED_STORE64(_p, _val) (*(uint64_t*)(_p) = (_val))
150
+
151
+ #elif defined(__arm__) && \
152
+ !defined(__ARM_ARCH_4__) && \
153
+ !defined(__ARM_ARCH_4T__) && /* http://wiki.debian.org/ArmEabiPort#Choice_of_minimum_CPU */ \
154
+ !defined(__MARM_ARMV4__) && \
155
+ !defined(_ARMV4I_) && \
156
+ !defined(__ARM_ARCH_5__) && \
157
+ !defined(__ARM_ARCH_5T__) && \
158
+ !defined(__ARM_ARCH_5E__) && \
159
+ !defined(__ARM_ARCH_5TE__) && \
160
+ !defined(__ARM_ARCH_5TEJ__) && \
161
+ !defined(__MARM_ARMV5__)
162
+
163
+ #define UNALIGNED_LOAD16(_p) (*(const uint16_t*)(_p))
164
+ #define UNALIGNED_LOAD32(_p) (*(const uint32_t*)(_p))
165
+ #define UNALIGNED_STORE16(_p, _val) (*(uint16_t*)(_p) = (_val))
166
+ #define UNALIGNED_STORE32(_p, _val) (*(uint32_t*)(_p) = (_val))
167
+
168
+ #pragma pack(1)
169
+ struct una_u64 { uint64_t x; };
170
+ #pragma pack()
171
+
172
+ static inline uint64_t UNALIGNED_LOAD64(const void *p)
173
+ {
174
+ const struct una_u64 *ptr = (const struct una_u64 *)p;
175
+ return ptr->x;
176
+ }
177
+
178
+ static inline void UNALIGNED_STORE64(void *p, uint64_t v)
179
+ {
180
+ struct una_u64 *ptr = (struct una_u64 *)p;
181
+ ptr->x = v;
182
+ }
183
+
184
+ #else /* !(x86 || powerpc) && !(arm && !(old arm architectures)) */
185
+
186
+ #pragma pack(1)
187
+ struct una_u16 { uint16_t x; };
188
+ struct una_u32 { uint32_t x; };
189
+ struct una_u64 { uint64_t x; };
190
+ #pragma pack()
191
+
192
+ static inline uint16_t UNALIGNED_LOAD16(const void *p)
193
+ {
194
+ const struct una_u16 *ptr = (const struct una_u16 *)p;
195
+ return ptr->x;
196
+ }
197
+
198
+ static inline uint32_t UNALIGNED_LOAD32(const void *p)
199
+ {
200
+ const struct una_u32 *ptr = (const struct una_u32 *)p;
201
+ return ptr->x;
202
+ }
203
+
204
+ static inline uint64_t UNALIGNED_LOAD64(const void *p)
205
+ {
206
+ const struct una_u64 *ptr = (const struct una_u64 *)p;
207
+ return ptr->x;
208
+ }
209
+
210
+ static inline void UNALIGNED_STORE16(void *p, uint16_t v)
211
+ {
212
+ struct una_u16 *ptr = (struct una_u16 *)p;
213
+ ptr->x = v;
214
+ }
215
+
216
+ static inline void UNALIGNED_STORE32(void *p, uint32_t v)
217
+ {
218
+ struct una_u32 *ptr = (struct una_u32 *)p;
219
+ ptr->x = v;
220
+ }
221
+
222
+ static inline void UNALIGNED_STORE64(void *p, uint64_t v)
223
+ {
224
+ struct una_u64 *ptr = (struct una_u64 *)p;
225
+ ptr->x = v;
226
+ }
227
+
228
+ #endif /* !(x86 || powerpc) && !(arm && !armv5 && !armv6) */
229
+
230
+
231
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
232
+ #define get_unaligned_le32(p) UNALIGNED_LOAD32(p)
233
+ #define put_unaligned_le16(v, p) UNALIGNED_STORE16(p, v)
234
+ #elif __BYTE_ORDER == __BIG_ENDIAN
235
+ static inline uint32_t get_unaligned_le32(const void *p)
236
+ {
237
+ return bswap_32(UNALIGNED_LOAD32(p));
238
+ }
239
+ static inline void put_unaligned_le16(uint16_t val, void *p)
240
+ {
241
+ UNALIGNED_STORE16(p, bswap_16(val));
242
+ }
243
+ #else
244
+ static inline uint32_t get_unaligned_le32(const void *p)
245
+ {
246
+ const uint8_t *b = (const uint8_t *)p;
247
+ return b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24);
248
+ }
249
+ static inline void put_unaligned_le16(uint16_t val, void *p)
250
+ {
251
+ uint8_t *b = (uint8_t *)p;
252
+ b[0] = val & 255;
253
+ b[1] = val >> 8;
254
+ }
255
+ #endif
256
+
257
+
258
+ #if defined(HAVE_BUILTIN_CTZ)
259
+
260
+ static inline int FindLSBSetNonZero(uint32_t n)
261
+ {
262
+ return __builtin_ctz(n);
263
+ }
264
+
265
+ static inline int FindLSBSetNonZero64(uint64_t n)
266
+ {
267
+ return __builtin_ctzll(n);
268
+ }
269
+
270
+ #else /* Portable versions. */
271
+
272
+ static inline int FindLSBSetNonZero(uint32_t n)
273
+ {
274
+ int rc = 31, i, shift;
275
+ uint32_t x;
276
+ for (i = 4, shift = 1 << 4; i >= 0; --i) {
277
+ x = n << shift;
278
+ if (x != 0) {
279
+ n = x;
280
+ rc -= shift;
281
+ }
282
+ shift >>= 1;
283
+ }
284
+ return rc;
285
+ }
286
+
287
+ /* FindLSBSetNonZero64() is defined in terms of FindLSBSetNonZero(). */
288
+ static inline int FindLSBSetNonZero64(uint64_t n)
289
+ {
290
+ const uint32_t bottombits = (uint32_t)n;
291
+ if (bottombits == 0) {
292
+ /* Bottom bits are zero, so scan in top bits */
293
+ return 32 + FindLSBSetNonZero((uint32_t)(n >> 32));
294
+ } else {
295
+ return FindLSBSetNonZero(bottombits);
296
+ }
297
+ }
298
+
299
+ #endif /* End portable versions. */
300
+
301
+ #endif /* CSNAPPY_INTERNAL_USERSPACE_H_ */
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sereal
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Borislav Nikolov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake-compiler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Sereal encoder/decoder (https://github.com/Sereal/Sereal)
31
+ email: jack@sofialondonmoskva.com
32
+ executables: []
33
+ extensions:
34
+ - ext/sereal/extconf.rb
35
+ extra_rdoc_files: []
36
+ files:
37
+ - ext/sereal/snappy/csnappy_compress.c
38
+ - ext/sereal/snappy/csnappy_decompress.c
39
+ - ext/sereal/decode.c
40
+ - ext/sereal/encode.c
41
+ - ext/sereal/sereal.c
42
+ - ext/sereal/buffer.h
43
+ - ext/sereal/snappy/csnappy_internal_userspace.h
44
+ - ext/sereal/snappy/csnappy.h
45
+ - ext/sereal/snappy/csnappy_internal.h
46
+ - ext/sereal/sereal.h
47
+ - ext/sereal/encode.h
48
+ - ext/sereal/decode.h
49
+ - ext/sereal/proto.h
50
+ - ext/sereal/extconf.rb
51
+ homepage: https://github.com/Sereal/Sereal
52
+ licenses: []
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 1.8.23
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: Sereal encoder/decoder
75
+ test_files: []