// Gzip Writer // // Douglas Thrift // // $Id$ #ifndef _GzipWriter_hpp_ #define _GzipWriter_hpp_ #include #ifdef MENES_PRAGMA_ONCE #pragma once #endif #include #include #include #include class Error : public api::Error { int code; cse::String message; public: Error(gzFile file) : message(::gzerror(file, &code)) { if (code == Z_ERRNO) #if defined(API_HAS_POSIX) throw api::Posix::Error(); #endif } virtual int GetNumber() const { return code; } virtual cse::String GetMessage() const { return _S() << "Zlib[#" << code << "]" << message; } }; _finline gzFile CheckError(gzFile status) { if (status == NULL) throw Error(status); return status; } _finline int CheckError(int status, gzFile file) { if (status != Z_OK) throw Error(file); return status; } class GzipWriter : public ios::Writer { gzFile file; public: GzipWriter(const cse::String &path); virtual ~GzipWriter(); virtual size_t Write(const byte_t *data, size_t length); virtual void Flush(); }; #endif//_GzipWriter_hpp_