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 #include "NptFile.h" 41 42 /*---------------------------------------------------------------------- 43 | class references 44 +---------------------------------------------------------------------*/ 45 class NPT_ZipInflateState; 46 class NPT_ZipDeflateState; 47 48 /*---------------------------------------------------------------------- 49 | NPT_Zip 50 +---------------------------------------------------------------------*/ 51 const int NPT_ZIP_COMPRESSION_LEVEL_DEFAULT = -1; 52 const int NPT_ZIP_COMPRESSION_LEVEL_MIN = 0; 53 const int NPT_ZIP_COMPRESSION_LEVEL_MAX = 9; 54 const int NPT_ZIP_COMPRESSION_LEVEL_NONE = 0; 55 class NPT_Zip 56 { 57 public: 58 // class methods 59 static NPT_Result MapError(int err); 60 61 /** 62 * Compressed data format 63 */ 64 typedef enum { 65 ZLIB, 66 GZIP 67 } Format; 68 69 /** 70 * Deflate (i.e compress) a buffer 71 */ 72 static NPT_Result Deflate(const NPT_DataBuffer& in, 73 NPT_DataBuffer& out, 74 int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT, 75 Format format = ZLIB); 76 77 /** 78 * Inflate (i.e decompress) a buffer 79 */ 80 static NPT_Result Inflate(const NPT_DataBuffer& in, 81 NPT_DataBuffer& out); 82 83 /** 84 * Deflate (i.e compress) a file 85 */ 86 static NPT_Result Deflate(NPT_File& in, 87 NPT_File& out, 88 int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT, 89 Format format = GZIP); 90 91 }; 92 93 /*---------------------------------------------------------------------- 94 | NPT_ZipInflatingInputStream 95 +---------------------------------------------------------------------*/ 96 class NPT_ZipInflatingInputStream : public NPT_InputStream 97 { 98 public: 99 NPT_ZipInflatingInputStream(NPT_InputStreamReference& source); 100 ~NPT_ZipInflatingInputStream(); 101 102 // NPT_InputStream methods 103 virtual NPT_Result Read(void* buffer, 104 NPT_Size bytes_to_read, 105 NPT_Size* bytes_read = NULL); 106 virtual NPT_Result Seek(NPT_Position offset); 107 virtual NPT_Result Tell(NPT_Position& offset); 108 virtual NPT_Result GetSize(NPT_LargeSize& size); 109 virtual NPT_Result GetAvailable(NPT_LargeSize& available); 110 111 private: 112 NPT_InputStreamReference m_Source; 113 NPT_Position m_Position; 114 NPT_ZipInflateState* m_State; 115 NPT_DataBuffer m_Buffer; 116 }; 117 118 /*---------------------------------------------------------------------- 119 | NPT_ZipInflatingOutputStream 120 +---------------------------------------------------------------------*/ 121 122 /*---------------------------------------------------------------------- 123 | NPT_ZipDeflatingInputStream 124 +---------------------------------------------------------------------*/ 125 class NPT_ZipDeflatingInputStream : public NPT_InputStream 126 { 127 public: 128 NPT_ZipDeflatingInputStream(NPT_InputStreamReference& source, 129 int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT, 130 NPT_Zip::Format format = NPT_Zip::ZLIB); 131 ~NPT_ZipDeflatingInputStream(); 132 133 // NPT_InputStream methods 134 virtual NPT_Result Read(void* buffer, 135 NPT_Size bytes_to_read, 136 NPT_Size* bytes_read = NULL); 137 virtual NPT_Result Seek(NPT_Position offset); 138 virtual NPT_Result Tell(NPT_Position& offset); 139 virtual NPT_Result GetSize(NPT_LargeSize& size); 140 virtual NPT_Result GetAvailable(NPT_LargeSize& available); 141 142 private: 143 NPT_InputStreamReference m_Source; 144 NPT_Position m_Position; 145 bool m_Eos; 146 NPT_ZipDeflateState* m_State; 147 NPT_DataBuffer m_Buffer; 148 }; 149 150 /*---------------------------------------------------------------------- 151 | NPT_ZipDeflatingOutputStream 152 +---------------------------------------------------------------------*/ 153 /*class NPT_ZipDeflatingOutputStream : public NPT_OutputStream 154 { 155 public: 156 NPT_ZipDeflatingOutputStream(NPT_OutputStreamReference& source, 157 int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT, 158 NPT_Zip::Format format = NPT_Zip::ZLIB); 159 NPT_ZipDeflatingOutputStream(); 160 161 // NPT_OutputStream methods 162 virtual NPT_Result Write(void* buffer, 163 NPT_Size bytes_to_write, 164 NPT_Size* bytes_written = NULL); 165 virtual NPT_Result Seek(NPT_Position offset); 166 virtual NPT_Result Tell(NPT_Position& offset); 167 168 private: 169 NPT_OutputStreamReference m_Output; 170 NPT_Position m_Position; 171 bool m_Eos; 172 NPT_ZipDeflateState* m_State; 173 NPT_DataBuffer m_Buffer; 174 }; */ 175 176 #endif // _NPT_ZIP_H_ 177