[mapnik-vector-tile] 09/15: Imported Upstream version 0.9.3+dfsg

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Sat Sep 12 11:06:52 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository mapnik-vector-tile.

commit 310997b1c8b268e108bf58514eda130505eb79a7
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Sep 11 22:55:51 2015 +0200

    Imported Upstream version 0.9.3+dfsg
---
 CHANGELOG.md                    |  4 ++++
 package.json                    |  2 +-
 src/vector_tile_compression.hpp | 15 ++++++++++++++-
 src/vector_tile_compression.ipp | 32 +++++++++++++++++++++-----------
 4 files changed, 40 insertions(+), 13 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 373fea1..d1ed0ca 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+## 0.9.3
+
+ - Improvements to zlib compression API
+
 ## 0.9.2
 
  - Fixed multipoint encoding (#144)
diff --git a/package.json b/package.json
index b0b90a6..cb09d04 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "mapnik-vector-tile",
-    "version": "0.9.2",
+    "version": "0.9.3",
     "description": "Mapnik vector tile API",
     "main": "./package.json",
     "repository"   :  {
diff --git a/src/vector_tile_compression.hpp b/src/vector_tile_compression.hpp
index 09c57b8..65205de 100644
--- a/src/vector_tile_compression.hpp
+++ b/src/vector_tile_compression.hpp
@@ -3,14 +3,25 @@
 
 #include <string>
 #include "vector_tile_config.hpp"
+#include <zlib.h>
 
 namespace mapnik { namespace vector_tile_impl {
 
+inline bool is_zlib_compressed(const char * data, std::size_t size)
+{
+    return size > 2 && static_cast<uint8_t>(data[0]) == 0x78 && static_cast<uint8_t>(data[1]) == 0x9C;
+}
+
 inline bool is_zlib_compressed(std::string const& data)
 {
     return data.size() > 2 && static_cast<uint8_t>(data[0]) == 0x78 && static_cast<uint8_t>(data[1]) == 0x9C;
 }
 
+inline bool is_gzip_compressed(const char * data, std::size_t size)
+{
+    return size > 2 && static_cast<uint8_t>(data[0]) == 0x1F && static_cast<uint8_t>(data[1]) == 0x8B;
+}
+
 inline bool is_gzip_compressed(std::string const& data)
 {
     return data.size() > 2 && static_cast<uint8_t>(data[0]) == 0x1F && static_cast<uint8_t>(data[1]) == 0x8B;
@@ -19,7 +30,9 @@ inline bool is_gzip_compressed(std::string const& data)
 // decodes both zlib and gzip
 // http://stackoverflow.com/a/1838702/2333354
 MAPNIK_VECTOR_INLINE void zlib_decompress(std::string const& input, std::string & output);
-MAPNIK_VECTOR_INLINE void zlib_compress(std::string const& input, std::string & output, bool gzip=true);
+MAPNIK_VECTOR_INLINE void zlib_compress(std::string const& input, std::string & output, bool gzip=true, int level=Z_DEFAULT_COMPRESSION, int strategy=Z_DEFAULT_STRATEGY);
+MAPNIK_VECTOR_INLINE void zlib_decompress(const char * data, std::size_t size, std::string & output);
+MAPNIK_VECTOR_INLINE void zlib_compress(const char * data, std::size_t size, std::string & output, bool gzip=true, int level=Z_DEFAULT_COMPRESSION, int strategy=Z_DEFAULT_STRATEGY);
 
 }} // end ns
 
diff --git a/src/vector_tile_compression.ipp b/src/vector_tile_compression.ipp
index 03a539c..75fd369 100644
--- a/src/vector_tile_compression.ipp
+++ b/src/vector_tile_compression.ipp
@@ -5,7 +5,7 @@ namespace mapnik { namespace vector_tile_impl {
 
 // decodes both zlib and gzip
 // http://stackoverflow.com/a/1838702/2333354
-void zlib_decompress(std::string const& input, std::string & output)
+void zlib_decompress(const char * data, std::size_t size, std::string & output)
 {
     z_stream inflate_s;
     inflate_s.zalloc = Z_NULL;
@@ -14,25 +14,30 @@ void zlib_decompress(std::string const& input, std::string & output)
     inflate_s.avail_in = 0;
     inflate_s.next_in = Z_NULL;
     inflateInit2(&inflate_s, 32 + 15);
-    inflate_s.next_in = (Bytef *)input.data();
-    inflate_s.avail_in = input.size();
+    inflate_s.next_in = (Bytef *)data;
+    inflate_s.avail_in = size;
     size_t length = 0;
     do {
-        output.resize(length + 2 * input.size());
-        inflate_s.avail_out = 2 * input.size();
+        output.resize(length + 2 * size);
+        inflate_s.avail_out = 2 * size;
         inflate_s.next_out = (Bytef *)(output.data() + length);
         int ret = inflate(&inflate_s, Z_FINISH);
         if (ret != Z_STREAM_END && ret != Z_OK && ret != Z_BUF_ERROR) {
             throw std::runtime_error(inflate_s.msg);
         }
 
-        length += (2 * input.size() - inflate_s.avail_out);
+        length += (2 * size - inflate_s.avail_out);
     } while (inflate_s.avail_out == 0);
     inflateEnd(&inflate_s);
     output.resize(length);
 }
 
-void zlib_compress(std::string const& input, std::string & output, bool gzip)
+void zlib_decompress(std::string const& input, std::string & output)
+{
+    zlib_decompress(input.data(),input.size(),output);
+}
+
+void zlib_compress(const char * data, std::size_t size, std::string & output, bool gzip, int level, int strategy)
 {
     z_stream deflate_s;
     deflate_s.zalloc = Z_NULL;
@@ -45,15 +50,15 @@ void zlib_compress(std::string const& input, std::string & output, bool gzip)
     {
         windowsBits = windowsBits | 16;
     }
-    if (deflateInit2(&deflate_s, Z_BEST_COMPRESSION, Z_DEFLATED, windowsBits, 8, Z_DEFAULT_STRATEGY) != Z_OK)
+    if (deflateInit2(&deflate_s, level, Z_DEFLATED, windowsBits, 8, strategy) != Z_OK)
     {
         throw std::runtime_error("deflate failed");
     }
-    deflate_s.next_in = (Bytef *)input.data();
-    deflate_s.avail_in = input.size();
+    deflate_s.next_in = (Bytef *)data;
+    deflate_s.avail_in = size;
     size_t length = 0;
     do {
-        size_t increase = input.size() / 2 + 1024;
+        size_t increase = size / 2 + 1024;
         output.resize(length + increase);
         deflate_s.avail_out = increase;
         deflate_s.next_out = (Bytef *)(output.data() + length);
@@ -67,4 +72,9 @@ void zlib_compress(std::string const& input, std::string & output, bool gzip)
     output.resize(length);
 }
 
+void zlib_compress(std::string const& input, std::string & output, bool gzip, int level, int strategy)
+{
+    zlib_compress(input.data(),input.size(),output,gzip,level,strategy);
+}
+
 }}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mapnik-vector-tile.git



More information about the Pkg-grass-devel mailing list