diff options
author | Max Kellermann <max@duempel.org> | 2014-07-30 22:26:24 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-08-06 16:35:10 +0200 |
commit | c9a71a7176f13cbd86c8270c523c0e506b2ab424 (patch) | |
tree | 1bc505fe58a10f2ddcd9fc4fa6671919eeeeba4d /src/fs/output/GzipOutputStream.hxx | |
parent | 7ed8833fd567da2b0583365b1790ff61cd10cfd5 (diff) | |
download | mpd-c9a71a7176f13cbd86c8270c523c0e506b2ab424.tar.gz mpd-c9a71a7176f13cbd86c8270c523c0e506b2ab424.tar.xz mpd-c9a71a7176f13cbd86c8270c523c0e506b2ab424.zip |
fs/GzipOutputStream: new class wrapping zlib
Diffstat (limited to '')
-rw-r--r-- | src/fs/output/GzipOutputStream.hxx | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/fs/output/GzipOutputStream.hxx b/src/fs/output/GzipOutputStream.hxx new file mode 100644 index 000000000..4f6d8b357 --- /dev/null +++ b/src/fs/output/GzipOutputStream.hxx @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_GZIP_OUTPUT_STREAM_HXX +#define MPD_GZIP_OUTPUT_STREAM_HXX + +#include "check.h" +#include "OutputStream.hxx" + +#include <assert.h> +#include <zlib.h> + +class Error; +class Domain; + +extern const Domain zlib_domain; + +/** + * A filter that compresses data written to it using zlib, forwarding + * compressed data in the "gzip" format. + * + * Don't forget to call Flush() before destructing this object. + */ +class GzipOutputStream final : public OutputStream { + OutputStream &next; + + z_stream z; + +public: + /** + * Construct the filter. Call IsDefined() to check whether + * the constructor has succeeded. If not, #error will hold + * information about the failure. + */ + GzipOutputStream(OutputStream &_next, Error &error); + ~GzipOutputStream(); + + /** + * Check whether the constructor has succeeded. + */ + bool IsDefined() const { + return z.opaque == nullptr; + } + + /** + * Finish the file and write all data remaining in zlib's + * output buffer. + */ + bool Flush(Error &error); + + /* virtual methods from class OutputStream */ + bool Write(const void *data, size_t size, Error &error) override; +}; + +#endif |