/*
 * Copyright 2010 The Android Open Source Project
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */


#ifndef SkFlate_DEFINED
#define SkFlate_DEFINED

#include "include/core/SkStream.h"

/**
  * Wrap a stream in this class to compress the information written to
  * this stream using the Deflate algorithm.
  *
  * See http://en.wikipedia.org/wiki/DEFLATE
  */
class SkDeflateWStream final : public SkWStream {
public:
    /** Does not take ownership of the stream.

        @param compressionLevel - 0 is no compression; 1 is best
        speed; 9 is best compression.  The default, -1, is to use
        zlib's Z_DEFAULT_COMPRESSION level.

        @param gzip iff true, output a gzip file. "The gzip format is
        a wrapper, documented in RFC 1952, around a deflate stream."
        gzip adds a header with a magic number to the beginning of the
        stream, allowing a client to identify a gzip file.
     */
    SkDeflateWStream(SkWStream*,
                     int compressionLevel = -1,
                     bool gzip = false);

    /** The destructor calls finalize(). */
    ~SkDeflateWStream() override;

    /** Write the end of the compressed stream.  All subsequent calls to
        write() will fail. Subsequent calls to finalize() do nothing. */
    void finalize();

    // The SkWStream interface:
    bool write(const void*, size_t) override;
    size_t bytesWritten() const override;

private:
    struct Impl;
    std::unique_ptr<Impl> fImpl;
};

#endif  // SkFlate_DEFINED
