You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2014/02/12 07:23:21 UTC
[11/15] snappy commit: updated refs/heads/import-master to 64cd135
Upgrade snappy to version 1.0.3
This new version slightly improves decompression speed.
Release notes at:
http://code.google.com/p/snappy/source/browse/trunk/NEWS
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@1136988 13f79535-47bb-0310-9956-ffa450edef68
Project: http://git-wip-us.apache.org/repos/asf/couchdb-snappy/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-snappy/commit/32ed37d3
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-snappy/tree/32ed37d3
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-snappy/diff/32ed37d3
Branch: refs/heads/import-master
Commit: 32ed37d32b34b97a8b02f52540a7b7179c5470e8
Parents: dbeaa25
Author: Filipe David Borba Manana <fd...@apache.org>
Authored: Fri Jun 17 19:15:55 2011 +0000
Committer: Filipe David Borba Manana <fd...@apache.org>
Committed: Fri Jun 17 19:15:55 2011 +0000
----------------------------------------------------------------------
Makefile.am | 4 +--
google-snappy/snappy.cc | 78 ++++++++++++++++++++++++--------------------
snappy.app.in | 2 +-
3 files changed, 45 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-snappy/blob/32ed37d3/Makefile.am
----------------------------------------------------------------------
diff --git a/Makefile.am b/Makefile.am
index c945627..5e9024d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,8 +10,8 @@
## License for the specific language governing permissions and limitations under
## the License.
-snappyebindir = $(localerlanglibdir)/snappy-1.0.1/ebin
-snappyprivdir = $(localerlanglibdir)/snappy-1.0.1/priv
+snappyebindir = $(localerlanglibdir)/snappy-1.0.3/ebin
+snappyprivdir = $(localerlanglibdir)/snappy-1.0.3/priv
snappy_cxx_srcs = \
snappy_nif.cc \
http://git-wip-us.apache.org/repos/asf/couchdb-snappy/blob/32ed37d3/google-snappy/snappy.cc
----------------------------------------------------------------------
diff --git a/google-snappy/snappy.cc b/google-snappy/snappy.cc
index 625029c..a591aba 100644
--- a/google-snappy/snappy.cc
+++ b/google-snappy/snappy.cc
@@ -653,44 +653,50 @@ class SnappyDecompressor {
// Process the next item found in the input.
// Returns true if successful, false on error or end of input.
template <class Writer>
- bool Step(Writer* writer) {
+ void DecompressAllTags(Writer* writer) {
const char* ip = ip_;
- if (ip_limit_ - ip < 5) {
- if (!RefillTag()) return false;
- ip = ip_;
- }
-
- const unsigned char c = *(reinterpret_cast<const unsigned char*>(ip++));
- const uint32 entry = char_table[c];
- const uint32 trailer = LittleEndian::Load32(ip) & wordmask[entry >> 11];
- ip += entry >> 11;
- const uint32 length = entry & 0xff;
+ for ( ;; ) {
+ if (ip_limit_ - ip < 5) {
+ ip_ = ip;
+ if (!RefillTag()) return;
+ ip = ip_;
+ }
- if ((c & 0x3) == LITERAL) {
- uint32 literal_length = length + trailer;
- uint32 avail = ip_limit_ - ip;
- while (avail < literal_length) {
+ const unsigned char c = *(reinterpret_cast<const unsigned char*>(ip++));
+ const uint32 entry = char_table[c];
+ const uint32 trailer = LittleEndian::Load32(ip) & wordmask[entry >> 11];
+ ip += entry >> 11;
+ const uint32 length = entry & 0xff;
+
+ if ((c & 0x3) == LITERAL) {
+ uint32 literal_length = length + trailer;
+ uint32 avail = ip_limit_ - ip;
+ while (avail < literal_length) {
+ bool allow_fast_path = (avail >= 16);
+ if (!writer->Append(ip, avail, allow_fast_path)) return;
+ literal_length -= avail;
+ reader_->Skip(peeked_);
+ size_t n;
+ ip = reader_->Peek(&n);
+ avail = n;
+ peeked_ = avail;
+ if (avail == 0) return; // Premature end of input
+ ip_limit_ = ip + avail;
+ }
bool allow_fast_path = (avail >= 16);
- if (!writer->Append(ip, avail, allow_fast_path)) return false;
- literal_length -= avail;
- reader_->Skip(peeked_);
- size_t n;
- ip = reader_->Peek(&n);
- avail = n;
- peeked_ = avail;
- if (avail == 0) return false; // Premature end of input
- ip_limit_ = ip + avail;
+ if (!writer->Append(ip, literal_length, allow_fast_path)) {
+ return;
+ }
+ ip += literal_length;
+ } else {
+ // copy_offset/256 is encoded in bits 8..10. By just fetching
+ // those bits, we get copy_offset (since the bit-field starts at
+ // bit 8).
+ const uint32 copy_offset = entry & 0x700;
+ if (!writer->AppendFromSelf(copy_offset + trailer, length)) {
+ return;
+ }
}
- ip_ = ip + literal_length;
- bool allow_fast_path = (avail >= 16);
- return writer->Append(ip, literal_length, allow_fast_path);
- } else {
- ip_ = ip;
- // copy_offset/256 is encoded in bits 8..10. By just fetching
- // those bits, we get copy_offset (since the bit-field starts at
- // bit 8).
- const uint32 copy_offset = entry & 0x700;
- return writer->AppendFromSelf(copy_offset + trailer, length);
}
}
};
@@ -770,7 +776,7 @@ static bool InternalUncompress(Source* r,
writer->SetExpectedLength(uncompressed_len);
// Process the entire input
- while (decompressor.Step(writer)) { }
+ decompressor.DecompressAllTags(writer);
return (decompressor.eof() && writer->CheckLength());
}
@@ -866,7 +872,7 @@ size_t Compress(Source* reader, Sink* writer) {
// A type that writes to a flat array.
// Note that this is not a "ByteSink", but a type that matches the
-// Writer template argument to SnappyDecompressor::Step().
+// Writer template argument to SnappyDecompressor::DecompressAllTags().
class SnappyArrayWriter {
private:
char* base_;
http://git-wip-us.apache.org/repos/asf/couchdb-snappy/blob/32ed37d3/snappy.app.in
----------------------------------------------------------------------
diff --git a/snappy.app.in b/snappy.app.in
index ae3683e..4ee1cda 100644
--- a/snappy.app.in
+++ b/snappy.app.in
@@ -1,7 +1,7 @@
{application, snappy,
[
{description, "snappy compressor/decompressor Erlang NIF wrapper"},
- {vsn, "1.0.1"},
+ {vsn, "1.0.3"},
{registered, []},
{applications, [
kernel,