[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