1 /* 2 * Copyright 2010 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 9 #ifndef SkFlate_DEFINED 10 #define SkFlate_DEFINED 11 12 #include "SkTypes.h" 13 14 #include "SkStream.h" 15 16 /** 17 * Wrap a stream in this class to compress the information written to 18 * this stream using the Deflate algorithm. 19 * 20 * See http://en.wikipedia.org/wiki/DEFLATE 21 */ 22 class SkDeflateWStream final : public SkWStream { 23 public: 24 /** Does not take ownership of the stream. 25 26 @param compressionLevel - 0 is no compression; 1 is best 27 speed; 9 is best compression. The default, -1, is to use 28 zlib's Z_DEFAULT_COMPRESSION level. 29 30 @param gzip iff true, output a gzip file. "The gzip format is 31 a wrapper, documented in RFC 1952, around a deflate stream." 32 gzip adds a header with a magic number to the beginning of the 33 stream, alowing a client to identify a gzip file. 34 */ 35 SkDeflateWStream(SkWStream*, 36 int compressionLevel = -1, 37 bool gzip = false); 38 39 /** The destructor calls finalize(). */ 40 ~SkDeflateWStream(); 41 42 /** Write the end of the compressed stream. All subsequent calls to 43 write() will fail. Subsequent calls to finalize() do nothing. */ 44 void finalize(); 45 46 // The SkWStream interface: 47 bool write(const void*, size_t) override; 48 size_t bytesWritten() const override; 49 50 private: 51 struct Impl; 52 SkAutoTDelete<Impl> fImpl; 53 }; 54 55 #endif // SkFlate_DEFINED 56