snappy 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitmodules +3 -0
- data/Rakefile +12 -13
- data/ext/extconf.rb +22 -31
- data/lib/snappy/reader.rb +10 -7
- data/lib/snappy/version.rb +1 -1
- data/snappy.gemspec +24 -0
- data/test/test-snappy-reader.rb +16 -0
- data/vendor/snappy/AUTHORS +1 -0
- data/vendor/snappy/COPYING +54 -0
- data/vendor/snappy/ChangeLog +1916 -0
- data/vendor/snappy/Makefile.am +23 -0
- data/vendor/snappy/NEWS +128 -0
- data/vendor/snappy/README +135 -0
- data/vendor/snappy/autogen.sh +7 -0
- data/vendor/snappy/configure.ac +133 -0
- data/vendor/snappy/format_description.txt +110 -0
- data/vendor/snappy/framing_format.txt +135 -0
- data/vendor/snappy/m4/gtest.m4 +74 -0
- data/vendor/snappy/snappy-c.cc +90 -0
- data/vendor/snappy/snappy-c.h +138 -0
- data/vendor/snappy/snappy-internal.h +150 -0
- data/vendor/snappy/snappy-sinksource.cc +71 -0
- data/vendor/snappy/snappy-sinksource.h +137 -0
- data/vendor/snappy/snappy-stubs-internal.cc +42 -0
- data/vendor/snappy/snappy-stubs-internal.h +491 -0
- data/vendor/snappy/snappy-stubs-public.h.in +98 -0
- data/vendor/snappy/snappy-test.cc +606 -0
- data/vendor/snappy/snappy-test.h +582 -0
- data/vendor/snappy/snappy.cc +1306 -0
- data/vendor/snappy/snappy.h +184 -0
- data/vendor/snappy/snappy_unittest.cc +1355 -0
- data/vendor/snappy/testdata/alice29.txt +3609 -0
- data/vendor/snappy/testdata/asyoulik.txt +4122 -0
- data/vendor/snappy/testdata/baddata1.snappy +0 -0
- data/vendor/snappy/testdata/baddata2.snappy +0 -0
- data/vendor/snappy/testdata/baddata3.snappy +0 -0
- data/vendor/snappy/testdata/fireworks.jpeg +0 -0
- data/vendor/snappy/testdata/geo.protodata +0 -0
- data/vendor/snappy/testdata/html +1 -0
- data/vendor/snappy/testdata/html_x_4 +1 -0
- data/vendor/snappy/testdata/kppkn.gtb +0 -0
- data/vendor/snappy/testdata/lcet10.txt +7519 -0
- data/vendor/snappy/testdata/paper-100k.pdf +600 -2
- data/vendor/snappy/testdata/plrabn12.txt +10699 -0
- data/vendor/snappy/testdata/urls.10K +10000 -0
- metadata +51 -12
@@ -0,0 +1,184 @@
|
|
1
|
+
// Copyright 2005 and onwards Google Inc.
|
2
|
+
//
|
3
|
+
// Redistribution and use in source and binary forms, with or without
|
4
|
+
// modification, are permitted provided that the following conditions are
|
5
|
+
// met:
|
6
|
+
//
|
7
|
+
// * Redistributions of source code must retain the above copyright
|
8
|
+
// notice, this list of conditions and the following disclaimer.
|
9
|
+
// * Redistributions in binary form must reproduce the above
|
10
|
+
// copyright notice, this list of conditions and the following disclaimer
|
11
|
+
// in the documentation and/or other materials provided with the
|
12
|
+
// distribution.
|
13
|
+
// * Neither the name of Google Inc. nor the names of its
|
14
|
+
// contributors may be used to endorse or promote products derived from
|
15
|
+
// this software without specific prior written permission.
|
16
|
+
//
|
17
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
18
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
19
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
20
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
21
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
24
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
25
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
//
|
29
|
+
// A light-weight compression algorithm. It is designed for speed of
|
30
|
+
// compression and decompression, rather than for the utmost in space
|
31
|
+
// savings.
|
32
|
+
//
|
33
|
+
// For getting better compression ratios when you are compressing data
|
34
|
+
// with long repeated sequences or compressing data that is similar to
|
35
|
+
// other data, while still compressing fast, you might look at first
|
36
|
+
// using BMDiff and then compressing the output of BMDiff with
|
37
|
+
// Snappy.
|
38
|
+
|
39
|
+
#ifndef UTIL_SNAPPY_SNAPPY_H__
|
40
|
+
#define UTIL_SNAPPY_SNAPPY_H__
|
41
|
+
|
42
|
+
#include <stddef.h>
|
43
|
+
#include <string>
|
44
|
+
|
45
|
+
#include "snappy-stubs-public.h"
|
46
|
+
|
47
|
+
namespace snappy {
|
48
|
+
class Source;
|
49
|
+
class Sink;
|
50
|
+
|
51
|
+
// ------------------------------------------------------------------------
|
52
|
+
// Generic compression/decompression routines.
|
53
|
+
// ------------------------------------------------------------------------
|
54
|
+
|
55
|
+
// Compress the bytes read from "*source" and append to "*sink". Return the
|
56
|
+
// number of bytes written.
|
57
|
+
size_t Compress(Source* source, Sink* sink);
|
58
|
+
|
59
|
+
// Find the uncompressed length of the given stream, as given by the header.
|
60
|
+
// Note that the true length could deviate from this; the stream could e.g.
|
61
|
+
// be truncated.
|
62
|
+
//
|
63
|
+
// Also note that this leaves "*source" in a state that is unsuitable for
|
64
|
+
// further operations, such as RawUncompress(). You will need to rewind
|
65
|
+
// or recreate the source yourself before attempting any further calls.
|
66
|
+
bool GetUncompressedLength(Source* source, uint32* result);
|
67
|
+
|
68
|
+
// ------------------------------------------------------------------------
|
69
|
+
// Higher-level string based routines (should be sufficient for most users)
|
70
|
+
// ------------------------------------------------------------------------
|
71
|
+
|
72
|
+
// Sets "*output" to the compressed version of "input[0,input_length-1]".
|
73
|
+
// Original contents of *output are lost.
|
74
|
+
//
|
75
|
+
// REQUIRES: "input[]" is not an alias of "*output".
|
76
|
+
size_t Compress(const char* input, size_t input_length, string* output);
|
77
|
+
|
78
|
+
// Decompresses "compressed[0,compressed_length-1]" to "*uncompressed".
|
79
|
+
// Original contents of "*uncompressed" are lost.
|
80
|
+
//
|
81
|
+
// REQUIRES: "compressed[]" is not an alias of "*uncompressed".
|
82
|
+
//
|
83
|
+
// returns false if the message is corrupted and could not be decompressed
|
84
|
+
bool Uncompress(const char* compressed, size_t compressed_length,
|
85
|
+
string* uncompressed);
|
86
|
+
|
87
|
+
|
88
|
+
// ------------------------------------------------------------------------
|
89
|
+
// Lower-level character array based routines. May be useful for
|
90
|
+
// efficiency reasons in certain circumstances.
|
91
|
+
// ------------------------------------------------------------------------
|
92
|
+
|
93
|
+
// REQUIRES: "compressed" must point to an area of memory that is at
|
94
|
+
// least "MaxCompressedLength(input_length)" bytes in length.
|
95
|
+
//
|
96
|
+
// Takes the data stored in "input[0..input_length]" and stores
|
97
|
+
// it in the array pointed to by "compressed".
|
98
|
+
//
|
99
|
+
// "*compressed_length" is set to the length of the compressed output.
|
100
|
+
//
|
101
|
+
// Example:
|
102
|
+
// char* output = new char[snappy::MaxCompressedLength(input_length)];
|
103
|
+
// size_t output_length;
|
104
|
+
// RawCompress(input, input_length, output, &output_length);
|
105
|
+
// ... Process(output, output_length) ...
|
106
|
+
// delete [] output;
|
107
|
+
void RawCompress(const char* input,
|
108
|
+
size_t input_length,
|
109
|
+
char* compressed,
|
110
|
+
size_t* compressed_length);
|
111
|
+
|
112
|
+
// Given data in "compressed[0..compressed_length-1]" generated by
|
113
|
+
// calling the Snappy::Compress routine, this routine
|
114
|
+
// stores the uncompressed data to
|
115
|
+
// uncompressed[0..GetUncompressedLength(compressed)-1]
|
116
|
+
// returns false if the message is corrupted and could not be decrypted
|
117
|
+
bool RawUncompress(const char* compressed, size_t compressed_length,
|
118
|
+
char* uncompressed);
|
119
|
+
|
120
|
+
// Given data from the byte source 'compressed' generated by calling
|
121
|
+
// the Snappy::Compress routine, this routine stores the uncompressed
|
122
|
+
// data to
|
123
|
+
// uncompressed[0..GetUncompressedLength(compressed,compressed_length)-1]
|
124
|
+
// returns false if the message is corrupted and could not be decrypted
|
125
|
+
bool RawUncompress(Source* compressed, char* uncompressed);
|
126
|
+
|
127
|
+
// Given data in "compressed[0..compressed_length-1]" generated by
|
128
|
+
// calling the Snappy::Compress routine, this routine
|
129
|
+
// stores the uncompressed data to the iovec "iov". The number of physical
|
130
|
+
// buffers in "iov" is given by iov_cnt and their cumulative size
|
131
|
+
// must be at least GetUncompressedLength(compressed). The individual buffers
|
132
|
+
// in "iov" must not overlap with each other.
|
133
|
+
//
|
134
|
+
// returns false if the message is corrupted and could not be decrypted
|
135
|
+
bool RawUncompressToIOVec(const char* compressed, size_t compressed_length,
|
136
|
+
const struct iovec* iov, size_t iov_cnt);
|
137
|
+
|
138
|
+
// Given data from the byte source 'compressed' generated by calling
|
139
|
+
// the Snappy::Compress routine, this routine stores the uncompressed
|
140
|
+
// data to the iovec "iov". The number of physical
|
141
|
+
// buffers in "iov" is given by iov_cnt and their cumulative size
|
142
|
+
// must be at least GetUncompressedLength(compressed). The individual buffers
|
143
|
+
// in "iov" must not overlap with each other.
|
144
|
+
//
|
145
|
+
// returns false if the message is corrupted and could not be decrypted
|
146
|
+
bool RawUncompressToIOVec(Source* compressed, const struct iovec* iov,
|
147
|
+
size_t iov_cnt);
|
148
|
+
|
149
|
+
// Returns the maximal size of the compressed representation of
|
150
|
+
// input data that is "source_bytes" bytes in length;
|
151
|
+
size_t MaxCompressedLength(size_t source_bytes);
|
152
|
+
|
153
|
+
// REQUIRES: "compressed[]" was produced by RawCompress() or Compress()
|
154
|
+
// Returns true and stores the length of the uncompressed data in
|
155
|
+
// *result normally. Returns false on parsing error.
|
156
|
+
// This operation takes O(1) time.
|
157
|
+
bool GetUncompressedLength(const char* compressed, size_t compressed_length,
|
158
|
+
size_t* result);
|
159
|
+
|
160
|
+
// Returns true iff the contents of "compressed[]" can be uncompressed
|
161
|
+
// successfully. Does not return the uncompressed data. Takes
|
162
|
+
// time proportional to compressed_length, but is usually at least
|
163
|
+
// a factor of four faster than actual decompression.
|
164
|
+
bool IsValidCompressedBuffer(const char* compressed,
|
165
|
+
size_t compressed_length);
|
166
|
+
|
167
|
+
// The size of a compression block. Note that many parts of the compression
|
168
|
+
// code assumes that kBlockSize <= 65536; in particular, the hash table
|
169
|
+
// can only store 16-bit offsets, and EmitCopy() also assumes the offset
|
170
|
+
// is 65535 bytes or less. Note also that if you change this, it will
|
171
|
+
// affect the framing format (see framing_format.txt).
|
172
|
+
//
|
173
|
+
// Note that there might be older data around that is compressed with larger
|
174
|
+
// block sizes, so the decompression code should not rely on the
|
175
|
+
// non-existence of long backreferences.
|
176
|
+
static const int kBlockLog = 16;
|
177
|
+
static const size_t kBlockSize = 1 << kBlockLog;
|
178
|
+
|
179
|
+
static const int kMaxHashTableBits = 14;
|
180
|
+
static const size_t kMaxHashTableSize = 1 << kMaxHashTableBits;
|
181
|
+
} // end namespace snappy
|
182
|
+
|
183
|
+
|
184
|
+
#endif // UTIL_SNAPPY_SNAPPY_H__
|