X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fzlibcompressed.cpp;h=fba71eb06d5e8b9ced1df0e2e1ce1e8ba743c889;hp=ffb08c5b80a2212d03d1b6d4f152dfa0a2733406;hb=HEAD;hpb=75bad78a6bb2ee39805c2c3c6627f95bfe776937 diff --git a/source/io/zlibcompressed.cpp b/source/io/zlibcompressed.cpp index ffb08c5..8896f14 100644 --- a/source/io/zlibcompressed.cpp +++ b/source/io/zlibcompressed.cpp @@ -1,6 +1,7 @@ #ifdef WITH_ZLIB #include #endif +#include #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 } @@ -113,6 +95,16 @@ ZlibCompressed::~ZlibCompressed() delete priv; } +void ZlibCompressed::set_block(bool) +{ + throw unsupported("ZlibCompressed::set_block"); +} + +void ZlibCompressed::set_inherit(bool) +{ + throw unsupported("ZlibCompressed::set_inherit"); +} + void ZlibCompressed::flush() { #ifdef WITH_ZLIB @@ -131,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(processedstream.next_in); + size_t free_in = (in_buffer+buffer_size-priv->stream.next_in); if(free_instream.next_in>in_buffer) { // Not all of the data fits in the buffer, so make some more room @@ -151,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; @@ -186,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(out_buffer), priv->stream.next_out-out_buffer); if(len>0) { - if(len(priv->stream.next_out-out_buffer)) + if(len(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; @@ -207,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(processedstream.next_out>out_buffer) { // We have some pending output, give it out first - unsigned len = min(priv->stream.next_out-out_buffer, size-processed); + size_t len = min(priv->stream.next_out-out_buffer, size-processed); copy(out_buffer, out_buffer+len, data+processed); processed += len; - if(len(priv->stream.next_out-out_buffer)) + if(len(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; @@ -251,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(priv->stream.next_in), in_buffer+buffer_size-priv->stream.next_in); + size_t len = below.read(reinterpret_cast(priv->stream.next_in), in_buffer+buffer_size-priv->stream.next_in); priv->stream.avail_in += len; if(!len && below.eof()) stream_end = true; @@ -268,5 +260,10 @@ unsigned ZlibCompressed::do_read(char *data, unsigned size) return processed; } +const Handle &ZlibCompressed::get_handle(Mode) +{ + throw unsupported("ZlibCompressed::get_handle"); +} + } // namespace IO } // namespace Msp