comparison deps/Platinum/ThirdParty/Neptune/Source/Core/NptZip.h @ 0:3425707ddbf6

Initial import (hopefully this mercurial stuff works...)
author fraserofthenight
date Mon, 06 Jul 2009 08:06:28 -0700
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:3425707ddbf6
1 /*****************************************************************
2 |
3 | Neptune - Zip Support
4 |
5 | Copyright (c) 2002-2008, Axiomatic Systems, LLC.
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions are met:
10 | * Redistributions of source code must retain the above copyright
11 | notice, this list of conditions and the following disclaimer.
12 | * Redistributions in binary form must reproduce the above copyright
13 | notice, this list of conditions and the following disclaimer in the
14 | documentation and/or other materials provided with the distribution.
15 | * Neither the name of Axiomatic Systems nor the
16 | names of its contributors may be used to endorse or promote products
17 | derived from this software without specific prior written permission.
18 |
19 | THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
20 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 | DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
23 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 |
30 ****************************************************************/
31
32 #ifndef _NPT_ZIP_H_
33 #define _NPT_ZIP_H_
34
35 /*----------------------------------------------------------------------
36 | includes
37 +---------------------------------------------------------------------*/
38 #include "NptConfig.h"
39 #include "NptStreams.h"
40
41 /*----------------------------------------------------------------------
42 | class references
43 +---------------------------------------------------------------------*/
44 class NPT_ZipInflateState;
45 class NPT_ZipDeflateState;
46
47 /*----------------------------------------------------------------------
48 | NPT_Zip
49 +---------------------------------------------------------------------*/
50 const int NPT_ZIP_COMPRESSION_LEVEL_DEFAULT = -1;
51 const int NPT_ZIP_COMPRESSION_LEVEL_MIN = 0;
52 const int NPT_ZIP_COMPRESSION_LEVEL_MAX = 9;
53 const int NPT_ZIP_COMPRESSION_LEVEL_NONE = 0;
54 class NPT_Zip
55 {
56 public:
57 // class methods
58 static NPT_Result MapError(int err);
59
60 /**
61 * Compressed data format
62 */
63 typedef enum {
64 ZLIB,
65 GZIP
66 } Format;
67
68 /**
69 * Deflate (i.e compress) a buffer
70 */
71 static NPT_Result Deflate(const NPT_DataBuffer& in,
72 NPT_DataBuffer& out,
73 int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT,
74 Format format = ZLIB);
75
76 /**
77 * Inflate (i.e decompress) a buffer
78 */
79 static NPT_Result Inflate(const NPT_DataBuffer& in,
80 NPT_DataBuffer& out);
81 };
82
83 /*----------------------------------------------------------------------
84 | NPT_ZipInflatingInputStream
85 +---------------------------------------------------------------------*/
86 class NPT_ZipInflatingInputStream : public NPT_InputStream
87 {
88 public:
89 NPT_ZipInflatingInputStream(NPT_InputStreamReference& source);
90 ~NPT_ZipInflatingInputStream();
91
92 // NPT_InputStream methods
93 virtual NPT_Result Read(void* buffer,
94 NPT_Size bytes_to_read,
95 NPT_Size* bytes_read = NULL);
96 virtual NPT_Result Seek(NPT_Position offset);
97 virtual NPT_Result Tell(NPT_Position& offset);
98 virtual NPT_Result GetSize(NPT_LargeSize& size);
99 virtual NPT_Result GetAvailable(NPT_LargeSize& available);
100
101 private:
102 NPT_InputStreamReference m_Source;
103 NPT_Position m_Position;
104 NPT_ZipInflateState* m_State;
105 NPT_DataBuffer m_Buffer;
106 };
107
108 /*----------------------------------------------------------------------
109 | NPT_ZipInflatingOutputStream
110 +---------------------------------------------------------------------*/
111
112 /*----------------------------------------------------------------------
113 | NPT_ZipDeflatingInputStream
114 +---------------------------------------------------------------------*/
115 class NPT_ZipDeflatingInputStream : public NPT_InputStream
116 {
117 public:
118 NPT_ZipDeflatingInputStream(NPT_InputStreamReference& source,
119 int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT,
120 NPT_Zip::Format format = NPT_Zip::ZLIB);
121 ~NPT_ZipDeflatingInputStream();
122
123 // NPT_InputStream methods
124 virtual NPT_Result Read(void* buffer,
125 NPT_Size bytes_to_read,
126 NPT_Size* bytes_read = NULL);
127 virtual NPT_Result Seek(NPT_Position offset);
128 virtual NPT_Result Tell(NPT_Position& offset);
129 virtual NPT_Result GetSize(NPT_LargeSize& size);
130 virtual NPT_Result GetAvailable(NPT_LargeSize& available);
131
132 private:
133 NPT_InputStreamReference m_Source;
134 NPT_Position m_Position;
135 bool m_Eos;
136 NPT_ZipDeflateState* m_State;
137 NPT_DataBuffer m_Buffer;
138 };
139
140 /*----------------------------------------------------------------------
141 | NPT_ZipDeflatingInputStream
142 +---------------------------------------------------------------------*/
143
144 #endif // _NPT_ZIP_H_