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 <sebas...@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 _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel