]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/zstream.h
Add new sample project files.
[wxWidgets.git] / interface / wx / zstream.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: zstream.h
e54c96f1 3// Purpose: interface of wxZlibOutputStream
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
23324ae1
FM
7/////////////////////////////////////////////////////////////////////////////
8
e7d0a28b
FM
9
10/// Compression level
11enum wxZlibCompressionLevels {
12 wxZ_DEFAULT_COMPRESSION = -1,
13 wxZ_NO_COMPRESSION = 0,
14 wxZ_BEST_SPEED = 1,
15 wxZ_BEST_COMPRESSION = 9
16};
17
18/// Flags
19enum wxZLibFlags {
20 wxZLIB_NO_HEADER = 0, //!< raw deflate stream, no header or checksum
21 wxZLIB_ZLIB = 1, //!< zlib header and checksum
22 wxZLIB_GZIP = 2, //!< gzip header and checksum, requires zlib 1.2.1+
23 wxZLIB_AUTO = 3 //!< autodetect header zlib or gzip
24};
25
26
23324ae1
FM
27/**
28 @class wxZlibOutputStream
7c913512 29
e7d0a28b
FM
30 This stream compresses all data written to it.
31
32 The compressed output can be in zlib or gzip format.
23324ae1
FM
33 Note that writing the gzip format requires zlib version 1.2.1 or greater
34 (the builtin version does support gzip format).
7c913512 35
e7d0a28b
FM
36 The stream is not seekable, wxOutputStream::SeekO() returns
37 ::wxInvalidOffset.
7c913512 38
23324ae1 39 @library{wxbase}
0801f345 40 @category{archive,streams}
7c913512 41
e54c96f1 42 @see wxOutputStream, wxZlibInputStream
23324ae1
FM
43*/
44class wxZlibOutputStream : public wxFilterOutputStream
45{
46public:
47 //@{
48 /**
e7d0a28b
FM
49 Creates a new write-only compressed stream.
50
51 @a level means level of compression. It is number between 0 and 9
52 (including these values) where 0 means no compression and 9 best but
53 slowest compression. -1 is default value (currently equivalent to 6).
54
23324ae1
FM
55 If the parent stream is passed as a pointer then the new filter stream
56 takes ownership of it. If it is passed by reference then it does not.
e7d0a28b 57
4cc4bfaf 58 The @a flags wxZLIB_ZLIB and wxZLIB_GZIP specify whether the output data
23324ae1 59 will be in zlib or gzip format. wxZLIB_ZLIB is the default.
e7d0a28b 60
4cc4bfaf 61 If @a flags is wxZLIB_NO_HEADER, then a raw deflate stream is output
e7d0a28b
FM
62 without either zlib or gzip headers. This is a lower level mode, which
63 is not usually used directly. It can be used to embed a raw deflate
64 stream in a higher level protocol.
65
66 The values of the ::wxZlibCompressionLevels and ::wxZLibFlags
67 enumerations can be used.
23324ae1
FM
68 */
69 wxZlibOutputStream(wxOutputStream& stream, int level = -1,
70 int flags = wxZLIB_ZLIB);
7c913512
FM
71 wxZlibOutputStream(wxOutputStream* stream, int level = -1,
72 int flags = wxZLIB_ZLIB);
23324ae1
FM
73 //@}
74
75 /**
76 Returns @true if zlib library in use can handle gzip compressed data.
77 */
78 static bool CanHandleGZip();
51acf83b
VZ
79
80 //@{
81 /**
82 Sets the dictionary to the specified chunk of data. This can improve
83 compression rate but note that the dictionary has to be the same when
84 you deflate the data as when you inflate the data, otherwise you
85 will inflate corrupted data.
86
87 Returns @true if the dictionary was successfully set.
88 */
89 bool SetDictionary(const char *data, const size_t datalen);
90 bool SetDictionary(const wxMemoryBuffer &buf);
91 //@}
23324ae1
FM
92};
93
94
e54c96f1 95
23324ae1
FM
96/**
97 @class wxZlibInputStream
7c913512 98
23324ae1
FM
99 This filter stream decompresses a stream that is in zlib or gzip format.
100 Note that reading the gzip format requires zlib version 1.2.1 or greater,
101 (the builtin version does support gzip format).
7c913512 102
e7d0a28b
FM
103 The stream is not seekable, wxInputStream::SeekI returns ::wxInvalidOffset.
104 Also wxStreamBase::GetSize() is not supported, it always returns 0.
7c913512 105
23324ae1 106 @library{wxbase}
0801f345 107 @category{archive,streams}
7c913512 108
e54c96f1 109 @see wxInputStream, wxZlibOutputStream.
23324ae1
FM
110*/
111class wxZlibInputStream : public wxFilterInputStream
112{
113public:
114 //@{
115 /**
116 If the parent stream is passed as a pointer then the new filter stream
117 takes ownership of it. If it is passed by reference then it does not.
e7d0a28b 118
4cc4bfaf 119 The @a flags wxZLIB_ZLIB and wxZLIB_GZIP specify whether the input data
23324ae1
FM
120 is in zlib or gzip format. If wxZLIB_AUTO is used, then zlib will
121 autodetect the stream type, this is the default.
e7d0a28b 122
4cc4bfaf 123 If @a flags is wxZLIB_NO_HEADER, then the data is assumed to be a raw
23324ae1
FM
124 deflate stream without either zlib or gzip headers. This is a lower level
125 mode, which is not usually used directly. It can be used to read a raw
126 deflate stream embedded in a higher level protocol.
e7d0a28b
FM
127
128 The values of the ::wxZLibFlags enumeration can be used.
23324ae1
FM
129 */
130 wxZlibInputStream(wxInputStream& stream, int flags = wxZLIB_AUTO);
e7d0a28b 131 wxZlibInputStream(wxInputStream* stream, int flags = wxZLIB_AUTO);
23324ae1
FM
132 //@}
133
134 /**
135 Returns @true if zlib library in use can handle gzip compressed data.
136 */
137 static bool CanHandleGZip();
51acf83b
VZ
138
139 //@{
140 /**
141 Sets the dictionary to the specified chunk of data. This can improve
142 compression rate but note that the dictionary has to be the same when
143 you deflate the data as when you inflate the data, otherwise you
144 will inflate corrupted data.
145
146 Returns @true if the dictionary was successfully set.
147 */
148 bool SetDictionary(const char *data, const size_t datalen);
149 bool SetDictionary(const wxMemoryBuffer &buf);
150 //@}
23324ae1 151};
e54c96f1 152