Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Gorshenin <y@maps.me>2016-12-08 01:57:10 +0300
committerYuri Gorshenin <y@maps.me>2016-12-08 02:01:45 +0300
commitd6816bb4ee5fc53f706e243e2e0e52d1d18a463a (patch)
tree6018dcb41e8cc2893f5d6457d25728daa0b40768 /coding/zlib.cpp
parentfce37cc9a0483aed41aaa15ad5b20ee64bd4c3e0 (diff)
[coding] ZLib wrappers.
Diffstat (limited to 'coding/zlib.cpp')
-rw-r--r--coding/zlib.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/coding/zlib.cpp b/coding/zlib.cpp
new file mode 100644
index 0000000000..61979359f4
--- /dev/null
+++ b/coding/zlib.cpp
@@ -0,0 +1,83 @@
+#include "coding/zlib.hpp"
+
+namespace coding
+{
+namespace
+{
+int LevelToInt(ZLib::Level level)
+{
+ switch (level)
+ {
+ case ZLib::Level::NoCompression: return Z_NO_COMPRESSION;
+ case ZLib::Level::BestSpeed: return Z_BEST_SPEED;
+ case ZLib::Level::BestCompression: return Z_BEST_COMPRESSION;
+ case ZLib::Level::DefaultCompression: return Z_DEFAULT_COMPRESSION;
+ }
+}
+} // namespace
+
+// ZLib::Processor ---------------------------------------------------------------------------------
+ZLib::Processor::Processor(char const * data, size_t size) : m_init(false)
+{
+ m_stream.next_in = const_cast<unsigned char *>(reinterpret_cast<unsigned char const *>(data));
+ m_stream.avail_in = size;
+
+ m_stream.next_out = reinterpret_cast<unsigned char *>(m_buffer);
+ m_stream.avail_out = kBufferSize;
+
+ m_stream.zalloc = Z_NULL;
+ m_stream.zfree = Z_NULL;
+ m_stream.opaque = Z_NULL;
+}
+
+bool ZLib::Processor::ConsumedAll() const
+{
+ ASSERT(IsInit(), ());
+ return m_stream.avail_in == 0;
+}
+
+bool ZLib::Processor::BufferIsFull() const
+{
+ ASSERT(IsInit(), ());
+ return m_stream.avail_out == 0;
+}
+
+// ZLib::Deflate -----------------------------------------------------------------------------------
+ZLib::DeflateProcessor::DeflateProcessor(char const * data, size_t size, ZLib::Level level)
+ : Processor(data, size)
+{
+ int const ret = deflateInit(&m_stream, LevelToInt(level));
+ m_init = (ret == Z_OK);
+}
+
+ZLib::DeflateProcessor::~DeflateProcessor()
+{
+ if (m_init)
+ deflateEnd(&m_stream);
+}
+
+int ZLib::DeflateProcessor::Process(int flush)
+{
+ ASSERT(IsInit(), ());
+ return deflate(&m_stream, flush);
+}
+
+// ZLib::Inflate -----------------------------------------------------------------------------------
+ZLib::InflateProcessor::InflateProcessor(char const * data, size_t size) : Processor(data, size)
+{
+ int const ret = inflateInit(&m_stream);
+ m_init = (ret == Z_OK);
+}
+
+ZLib::InflateProcessor::~InflateProcessor()
+{
+ if (m_init)
+ inflateEnd(&m_stream);
+}
+
+int ZLib::InflateProcessor::Process(int flush)
+{
+ ASSERT(IsInit(), ());
+ return inflate(&m_stream, flush);
+}
+} // namespace coding