zipios 2.3.4
Zipios -- a small C++ library providing easy access to .zip files.
|
Save the output stream buffer. More...
#include <gzipoutputstreambuf.hpp>
Public Member Functions | |
GZIPOutputStreambuf (std::streambuf *outbuf, FileEntry::CompressionLevel compression_level) | |
Initialize a GZIPOutputStreambuf object. | |
virtual | ~GZIPOutputStreambuf () override |
Ensures that the stream gets closed properly. | |
void | close () |
Close the stream. | |
void | closeStream () |
Closing the stream. | |
void | finish () |
Finishes the compression. | |
uint32_t | getCrc32 () const |
Get the CRC32 of the file. | |
size_t | getSize () const |
Retrieve the size of the file deflated. | |
bool | init (FileEntry::CompressionLevel compression_level) |
Initialize the zlib library. | |
void | setComment (std::string const &comment) |
void | setFilename (std::string const &filename) |
Protected Member Functions | |
virtual int | overflow (int c=EOF) override |
Handle an overflow. | |
virtual int | sync () override |
Synchronize the buffer. | |
Protected Attributes | |
uint32_t | m_crc32 = 0 |
std::vector< char > | m_invec = std::vector<char>() |
std::streambuf * | m_outbuf = nullptr |
uint32_t | m_overflown_bytes = 0 |
Private Member Functions | |
void | endDeflation () |
End deflation of current file. | |
void | flushOutvec () |
Flush the cached output data. | |
void | writeHeader () |
void | writeInt (uint32_t i) |
void | writeTrailer () |
Private Attributes | |
std::string | m_comment = std::string() |
std::string | m_filename = std::string() |
bool | m_open = false |
std::vector< char > | m_outvec = std::vector<char>() |
z_stream | m_zs = z_stream() |
bool | m_zs_initialized = false |
This class is used to output the data of a file in a gzip stream including the necessary header and footer.
Definition at line 41 of file gzipoutputstreambuf.hpp.
zipios::GZIPOutputStreambuf::GZIPOutputStreambuf | ( | std::streambuf * | outbuf, |
FileEntry::CompressionLevel | compression_level | ||
) |
A newly constructed GZIPOutputStreambuf is ready to accept data.
[in,out] | outbuf | The streambuf to use for output. |
[in] | compression_level | The compression level to use to compress. |
Definition at line 54 of file gzipoutputstreambuf.cpp.
References zipios::DeflateOutputStreambuf::init().
|
overridevirtual |
This function makes sure that the stream gets closed properly which means that the compress terminates by calling finish() and the streams get closed.
Definition at line 70 of file gzipoutputstreambuf.cpp.
References finish().
void zipios::GZIPOutputStreambuf::close | ( | ) |
This function ensures that the streams get closed.
Definition at line 92 of file gzipoutputstreambuf.cpp.
References finish().
|
inherited |
This function is expected to be called once the stream is getting closed (the buffer is destroyed.)
It ensures that the zlib library last few bytes get flushed and then mark the class as closed.
Note that this function can be called to close the current zlib library stream and start a new one. It is actually called from the putNextEntry() function (via the closeEntry() function.)
Definition at line 200 of file deflateoutputstreambuf.cpp.
References zipios::DeflateOutputStreambuf::endDeflation(), zipios::DeflateOutputStreambuf::m_zs, and zipios::DeflateOutputStreambuf::m_zs_initialized.
Referenced by zipios::DeflateOutputStreambuf::~DeflateOutputStreambuf(), zipios::ZipOutputStreambuf::closeEntry(), and finish().
|
privateinherited |
This function flushes the remaining data in the zlib buffers, after which the only possible operations are deflateEnd() or deflateReset().
Definition at line 377 of file deflateoutputstreambuf.cpp.
References zipios::DeflateOutputStreambuf::flushOutvec(), zipios::getBufferSize(), zipios::DeflateOutputStreambuf::m_outvec, zipios::DeflateOutputStreambuf::m_overflown_bytes, zipios::DeflateOutputStreambuf::m_zs, and zipios::DeflateOutputStreambuf::overflow().
Referenced by zipios::DeflateOutputStreambuf::closeStream().
void zipios::GZIPOutputStreambuf::finish | ( | ) |
Write whatever is still necessary and close the streams.
Definition at line 102 of file gzipoutputstreambuf.cpp.
References zipios::DeflateOutputStreambuf::closeStream(), m_open, and writeTrailer().
Referenced by ~GZIPOutputStreambuf(), and close().
|
privateinherited |
This function flushes m_outvec and updates the output pointer and size m_zs.next_out and m_zs.avail_out.
Definition at line 346 of file deflateoutputstreambuf.cpp.
References zipios::getBufferSize(), zipios::FilterOutputStreambuf::m_outbuf, zipios::DeflateOutputStreambuf::m_outvec, and zipios::DeflateOutputStreambuf::m_zs.
Referenced by zipios::DeflateOutputStreambuf::endDeflation(), and zipios::DeflateOutputStreambuf::overflow().
|
inherited |
This function returns the CRC32 for the current file.
The returned value is the CRC for the data that has been compressed already (due to calls to overflow()). As DeflateOutputStreambuf may buffer an arbitrary amount of bytes until closeStream() has been invoked, the returned value is not very useful before closeStream() has been called.
Definition at line 234 of file deflateoutputstreambuf.cpp.
References zipios::DeflateOutputStreambuf::m_crc32.
Referenced by zipios::ZipOutputStreambuf::updateEntryHeaderInfo(), and writeTrailer().
|
inherited |
This function returns the number of bytes written to the streambuf object and that were processed from the input buffer by the compressor. After closeStream() has been called this number is the total number of bytes written to the stream. In other words, the size of the uncompressed data.
Definition at line 251 of file deflateoutputstreambuf.cpp.
References zipios::DeflateOutputStreambuf::m_overflown_bytes.
Referenced by zipios::ZipOutputStreambuf::updateEntryHeaderInfo(), and writeTrailer().
|
inherited |
This method is called in the constructor, so it must not write anything to the output streambuf m_outbuf (see notice in constructor.)
It will initialize the output stream as required to accept data to be compressed using the zlib library. The compression level is expected to come from the FileEntry which is about to be saved in the file.
[in] | compression_level | The level of compression. A number from 1 to 100 or a special number representing the best, minimum, maximum compression available. |
Definition at line 101 of file deflateoutputstreambuf.cpp.
References zipios::FileEntry::COMPRESSION_LEVEL_DEFAULT, zipios::FileEntry::COMPRESSION_LEVEL_FASTEST, zipios::FileEntry::COMPRESSION_LEVEL_MAXIMUM, zipios::FileEntry::COMPRESSION_LEVEL_MINIMUM, zipios::FileEntry::COMPRESSION_LEVEL_NONE, zipios::FileEntry::COMPRESSION_LEVEL_SMALLEST, zipios::getBufferSize(), zipios::DeflateOutputStreambuf::m_crc32, zipios::DeflateOutputStreambuf::m_invec, zipios::DeflateOutputStreambuf::m_outvec, zipios::DeflateOutputStreambuf::m_zs, and zipios::DeflateOutputStreambuf::m_zs_initialized.
Referenced by GZIPOutputStreambuf(), and zipios::ZipOutputStreambuf::putNextEntry().
|
overrideprotectedvirtual |
This function is called by the streambuf implementation whenever "too many bytes" are in the output buffer, ready to be compressed.
IOException | This exception is raised whenever the overflow() function calls a zlib library function which returns an error. |
[in] | c | The character (byte) that overflowed the buffer. |
Reimplemented from zipios::DeflateOutputStreambuf.
Definition at line 115 of file gzipoutputstreambuf.cpp.
References m_open, zipios::DeflateOutputStreambuf::overflow(), and writeHeader().
void zipios::GZIPOutputStreambuf::setComment | ( | std::string const & | comment | ) |
Definition at line 82 of file gzipoutputstreambuf.cpp.
References m_comment.
void zipios::GZIPOutputStreambuf::setFilename | ( | std::string const & | filename | ) |
Definition at line 76 of file gzipoutputstreambuf.cpp.
References m_filename.
|
overrideprotectedvirtual |
The sync() function is expected to clear the input buffer so that any new data read from the input (i.e. a file) are re-read from disk. However, a call to sync() could break the filtering functionality so we do not implement it at all.
This means you are stuck with the existing buffer. But to make sure the system understands that, we always returns -1.
Reimplemented from zipios::DeflateOutputStreambuf.
Definition at line 127 of file gzipoutputstreambuf.cpp.
References zipios::DeflateOutputStreambuf::sync().
|
private |
Definition at line 133 of file gzipoutputstreambuf.cpp.
References m_comment, m_filename, and zipios::FilterOutputStreambuf::m_outbuf.
Referenced by overflow().
|
private |
Definition at line 183 of file gzipoutputstreambuf.cpp.
References zipios::FilterOutputStreambuf::m_outbuf.
Referenced by writeTrailer().
|
private |
Definition at line 175 of file gzipoutputstreambuf.cpp.
References zipios::DeflateOutputStreambuf::getCrc32(), zipios::DeflateOutputStreambuf::getSize(), and writeInt().
Referenced by finish().
|
private |
Definition at line 62 of file gzipoutputstreambuf.hpp.
Referenced by setComment(), and writeHeader().
|
protectedinherited |
|
private |
Definition at line 61 of file gzipoutputstreambuf.hpp.
Referenced by setFilename(), and writeHeader().
|
protectedinherited |
Definition at line 66 of file deflateoutputstreambuf.hpp.
Referenced by zipios::DeflateOutputStreambuf::init(), zipios::DeflateOutputStreambuf::overflow(), zipios::ZipOutputStreambuf::overflow(), and zipios::ZipOutputStreambuf::putNextEntry().
|
private |
Definition at line 63 of file gzipoutputstreambuf.hpp.
Referenced by finish(), and overflow().
|
protectedinherited |
Definition at line 50 of file filteroutputstreambuf.hpp.
Referenced by zipios::FilterOutputStreambuf::FilterOutputStreambuf(), zipios::ZipOutputStreambuf::finish(), zipios::DeflateOutputStreambuf::flushOutvec(), zipios::ZipOutputStreambuf::overflow(), zipios::ZipOutputStreambuf::putNextEntry(), zipios::ZipOutputStreambuf::updateEntryHeaderInfo(), writeHeader(), and writeInt().
|
privateinherited |
Definition at line 76 of file deflateoutputstreambuf.hpp.
Referenced by zipios::DeflateOutputStreambuf::endDeflation(), zipios::DeflateOutputStreambuf::flushOutvec(), zipios::DeflateOutputStreambuf::init(), and zipios::DeflateOutputStreambuf::overflow().
|
protectedinherited |
Definition at line 65 of file deflateoutputstreambuf.hpp.
Referenced by zipios::DeflateOutputStreambuf::endDeflation(), zipios::DeflateOutputStreambuf::getSize(), zipios::ZipOutputStreambuf::overflow(), and zipios::ZipOutputStreambuf::putNextEntry().
|
privateinherited |
Definition at line 73 of file deflateoutputstreambuf.hpp.
Referenced by zipios::DeflateOutputStreambuf::closeStream(), zipios::DeflateOutputStreambuf::endDeflation(), zipios::DeflateOutputStreambuf::flushOutvec(), zipios::DeflateOutputStreambuf::init(), and zipios::DeflateOutputStreambuf::overflow().
|
privateinherited |
Definition at line 74 of file deflateoutputstreambuf.hpp.
Referenced by zipios::DeflateOutputStreambuf::closeStream(), and zipios::DeflateOutputStreambuf::init().