]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/zlibcompressed.cpp
Add move semantics to Variant
[libs/core.git] / source / io / zlibcompressed.cpp
index 99ae7f81f8845016e73e92d60f13083e7e672ee6..8896f147bf6b1ecb038e7739a275a4a7c5732a96 100644 (file)
@@ -1,6 +1,7 @@
 #ifdef WITH_ZLIB
 #include <zlib.h>
 #endif
+#include <msp/core/except.h>
 #include "zlibcompressed.h"
 
 using namespace std;
@@ -8,13 +9,13 @@ using namespace std;
 namespace Msp {
 namespace IO {
 
-zlib_error::zlib_error(const std::string &w, int c):
+zlib_error::zlib_error(const string &w, int c):
 #ifdef WITH_ZLIB
        runtime_error(w+": "+zError(c)),
 #else
        runtime_error(w),
 #endif
-       code_(c)
+       m_code(c)
 { }
 
 
@@ -30,23 +31,13 @@ struct ZlibCompressed::Private
 ZlibCompressed::Private::Private()
 {
 #ifdef WITH_ZLIB
-       stream.zalloc = 0;
-       stream.zfree = 0;
-       stream.opaque = 0;
+       stream.zalloc = nullptr;
+       stream.zfree = nullptr;
+       stream.opaque = nullptr;
 #endif
 }
 
 
-ZlibCompressed::ZlibCompressed(Base &b, unsigned level):
-       below(b)
-{
-       mode = below.get_mode()&M_RDWR;
-       if(mode!=M_READ && mode!=M_WRITE)
-               throw invalid_access(mode);
-
-       init(level);
-}
-
 ZlibCompressed::ZlibCompressed(Base &b, Mode m, unsigned level):
        below(b)
 {
@@ -54,16 +45,7 @@ ZlibCompressed::ZlibCompressed(Base &b, Mode m, unsigned level):
        if(mode!=M_READ && mode!=M_WRITE)
                throw invalid_access(m);
 
-       init(level);
-}
-
-void ZlibCompressed::init(unsigned level)
-{
 #ifdef WITH_ZLIB
-       buffer_size = 1024;
-       in_buffer = 0;
-       out_buffer = 0;
-       stream_end = false;
        priv = new Private;
 
        if(mode==M_WRITE)
@@ -92,7 +74,7 @@ void ZlibCompressed::init(unsigned level)
        (void)buffer_size;
        (void)stream_end;
        (void)level;
-       throw zlib_error("unsupported", -1);
+       throw unsupported("ZlibCompressed");
 #endif
 }
 
@@ -115,7 +97,12 @@ ZlibCompressed::~ZlibCompressed()
 
 void ZlibCompressed::set_block(bool)
 {
-       throw logic_error("ZlibCompressed::set_block");
+       throw unsupported("ZlibCompressed::set_block");
+}
+
+void ZlibCompressed::set_inherit(bool)
+{
+       throw unsupported("ZlibCompressed::set_inherit");
 }
 
 void ZlibCompressed::flush()
@@ -136,15 +123,15 @@ void ZlibCompressed::flush()
 #endif
 }
 
-unsigned ZlibCompressed::do_write(const char *data, unsigned size)
+size_t ZlibCompressed::do_write(const char *data, size_t size)
 {
        check_access(M_WRITE);
 
-       unsigned processed = 0;
+       size_t processed = 0;
 #ifdef WITH_ZLIB
        while(processed<size)
        {
-               unsigned free_in = (in_buffer+buffer_size-priv->stream.next_in);
+               size_t free_in = (in_buffer+buffer_size-priv->stream.next_in);
                if(free_in<size && priv->stream.next_in>in_buffer)
                {
                        // Not all of the data fits in the buffer, so make some more room
@@ -156,7 +143,7 @@ unsigned ZlibCompressed::do_write(const char *data, unsigned size)
                if(free_in)
                {
                        // Copy as much data into the input buffer as possible
-                       unsigned len = min(free_in, size-processed);
+                       size_t len = min(free_in, size-processed);
                        copy(data+processed, data+processed+len, priv->stream.next_in+priv->stream.avail_in);
                        priv->stream.avail_in += len;
                        processed += len;
@@ -191,12 +178,12 @@ bool ZlibCompressed::compress_data(int flush_mode)
        }
 
        // Write compressed data into the underlying object
-       unsigned len = 0;
+       size_t len = 0;
        if(priv->stream.next_out>out_buffer)
                len = below.write(reinterpret_cast<char *>(out_buffer), priv->stream.next_out-out_buffer);
        if(len>0)
        {
-               if(len<static_cast<unsigned>(priv->stream.next_out-out_buffer))
+               if(len<static_cast<size_t>(priv->stream.next_out-out_buffer))
                        copy(out_buffer+len, priv->stream.next_out, out_buffer);
                priv->stream.avail_out += len;
                priv->stream.next_out -= len;
@@ -212,23 +199,23 @@ bool ZlibCompressed::compress_data(int flush_mode)
 #endif
 }
 
-unsigned ZlibCompressed::do_read(char *data, unsigned size)
+size_t ZlibCompressed::do_read(char *data, size_t size)
 {
        check_access(M_READ);
 
-       unsigned processed = 0;
+       size_t processed = 0;
 #ifdef WITH_ZLIB
        while(processed<size)
        {
                if(priv->stream.next_out>out_buffer)
                {
                        // We have some pending output, give it out first
-                       unsigned len = min<unsigned>(priv->stream.next_out-out_buffer, size-processed);
+                       size_t len = min<size_t>(priv->stream.next_out-out_buffer, size-processed);
 
                        copy(out_buffer, out_buffer+len, data+processed);
                        processed += len;
 
-                       if(len<static_cast<unsigned>(priv->stream.next_out-out_buffer))
+                       if(len<static_cast<size_t>(priv->stream.next_out-out_buffer))
                                copy(out_buffer+len, priv->stream.next_out, out_buffer);
                        priv->stream.next_out -= len;
                        priv->stream.avail_out += len;
@@ -256,7 +243,7 @@ unsigned ZlibCompressed::do_read(char *data, unsigned size)
                                copy(priv->stream.next_in, priv->stream.next_in+priv->stream.avail_in, in_buffer);
                        priv->stream.next_in = in_buffer;
 
-                       unsigned len = below.read(reinterpret_cast<char *>(priv->stream.next_in), in_buffer+buffer_size-priv->stream.next_in);
+                       size_t len = below.read(reinterpret_cast<char *>(priv->stream.next_in), in_buffer+buffer_size-priv->stream.next_in);
                        priv->stream.avail_in += len;
                        if(!len && below.eof())
                                stream_end = true;
@@ -275,7 +262,7 @@ unsigned ZlibCompressed::do_read(char *data, unsigned size)
 
 const Handle &ZlibCompressed::get_handle(Mode)
 {
-       throw logic_error("ZlibCompressed::get_handle");
+       throw unsupported("ZlibCompressed::get_handle");
 }
 
 } // namespace IO