e9c40ae9e0837f55b17513cddb794a7090feca6e
[platform/upstream/libSkiaSharp.git] / src / core / SkFlate.h
1
2 /*
3  * Copyright 2010 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8
9
10 #ifndef SkFlate_DEFINED
11 #define SkFlate_DEFINED
12
13 #include "SkTypes.h"
14
15 #ifndef Sk_NO_FLATE
16
17 #include "SkStream.h"
18 class SkData;
19
20 /** \class SkFlate
21     A class to provide access to the flate compression algorithm.
22 */
23 class SkFlate {
24 public:
25     /**
26      *  Use the flate compression algorithm to compress the data in src,
27      *  putting the result into dst.  Returns false if an error occurs.
28      */
29     static bool Deflate(SkStream* src, SkWStream* dst);
30
31     /**
32      *  Use the flate compression algorithm to compress the data in src,
33      *  putting the result into dst.  Returns false if an error occurs.
34      */
35     static bool Deflate(const void* src, size_t len, SkWStream* dst);
36
37     /**
38      *  Use the flate compression algorithm to compress the data,
39      *  putting the result into dst.  Returns false if an error occurs.
40      */
41     static bool Deflate(const SkData*, SkWStream* dst);
42
43     /** Use the flate compression algorithm to decompress the data in src,
44         putting the result into dst.  Returns false if an error occurs.
45      */
46     static bool Inflate(SkStream* src, SkWStream* dst);
47 };
48
49 /**
50   * Wrap a stream in this class to compress the information written to
51   * this stream using the Deflate algorithm.  Uses Zlib's
52   * Z_DEFAULT_COMPRESSION level.
53   *
54   * See http://en.wikipedia.org/wiki/DEFLATE
55   */
56 class SkDeflateWStream : public SkWStream {
57 public:
58     /** Does not take ownership of the stream. */
59     SkDeflateWStream(SkWStream*);
60
61     /** The destructor calls finalize(). */
62     ~SkDeflateWStream();
63
64     /** Write the end of the compressed stream.  All subsequent calls to
65         write() will fail. Subsequent calls to finalize() do nothing. */
66     void finalize();
67
68     // The SkWStream interface:
69     bool write(const void*, size_t) SK_OVERRIDE;
70     size_t bytesWritten() const SK_OVERRIDE;
71
72 private:
73     struct Impl;
74     SkAutoTDelete<Impl> fImpl;
75 };
76
77 #endif  // SK_NO_FLATE
78 #endif  // SkFlate_DEFINED