]>
Commit | Line | Data |
---|---|---|
caf72ff3 | 1 | /* Types.h -- Basic types |
5fe8380d | 2 | 2010-10-09 : Igor Pavlov : Public domain */ |
caf72ff3 LCM |
3 | |
4 | #ifndef __7Z_TYPES_H | |
5 | #define __7Z_TYPES_H | |
6 | ||
7 | #include <stddef.h> | |
8 | ||
9 | #ifdef _WIN32 | |
10 | #include <windows.h> | |
11 | #endif | |
12 | ||
13 | #define SZ_OK 0 | |
14 | ||
15 | #define SZ_ERROR_DATA 1 | |
16 | #define SZ_ERROR_MEM 2 | |
17 | #define SZ_ERROR_CRC 3 | |
18 | #define SZ_ERROR_UNSUPPORTED 4 | |
19 | #define SZ_ERROR_PARAM 5 | |
20 | #define SZ_ERROR_INPUT_EOF 6 | |
21 | #define SZ_ERROR_OUTPUT_EOF 7 | |
22 | #define SZ_ERROR_READ 8 | |
23 | #define SZ_ERROR_WRITE 9 | |
24 | #define SZ_ERROR_PROGRESS 10 | |
25 | #define SZ_ERROR_FAIL 11 | |
26 | #define SZ_ERROR_THREAD 12 | |
27 | ||
28 | #define SZ_ERROR_ARCHIVE 16 | |
29 | #define SZ_ERROR_NO_ARCHIVE 17 | |
30 | ||
31 | typedef int SRes; | |
32 | ||
33 | #ifdef _WIN32 | |
34 | typedef DWORD WRes; | |
35 | #else | |
36 | typedef int WRes; | |
37 | #endif | |
38 | ||
39 | #ifndef RINOK | |
40 | #define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } | |
41 | #endif | |
42 | ||
43 | typedef unsigned char Byte; | |
44 | typedef short Int16; | |
45 | typedef unsigned short UInt16; | |
46 | ||
47 | #ifdef _LZMA_UINT32_IS_ULONG | |
48 | typedef long Int32; | |
49 | typedef unsigned long UInt32; | |
50 | #else | |
51 | typedef int Int32; | |
52 | typedef unsigned int UInt32; | |
53 | #endif | |
54 | ||
55 | #ifdef _SZ_NO_INT_64 | |
56 | ||
57 | /* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. | |
58 | NOTES: Some code will work incorrectly in that case! */ | |
59 | ||
60 | typedef long Int64; | |
61 | typedef unsigned long UInt64; | |
62 | ||
63 | #else | |
64 | ||
65 | #if defined(_MSC_VER) || defined(__BORLANDC__) | |
66 | typedef __int64 Int64; | |
67 | typedef unsigned __int64 UInt64; | |
5fe8380d | 68 | #define UINT64_CONST(n) n |
caf72ff3 LCM |
69 | #else |
70 | typedef long long int Int64; | |
71 | typedef unsigned long long int UInt64; | |
5fe8380d | 72 | #define UINT64_CONST(n) n ## ULL |
caf72ff3 LCM |
73 | #endif |
74 | ||
75 | #endif | |
76 | ||
77 | #ifdef _LZMA_NO_SYSTEM_SIZE_T | |
78 | typedef UInt32 SizeT; | |
79 | #else | |
80 | typedef size_t SizeT; | |
81 | #endif | |
82 | ||
83 | typedef int Bool; | |
84 | #define True 1 | |
85 | #define False 0 | |
86 | ||
87 | ||
88 | #ifdef _MSC_VER | |
89 | ||
90 | #if _MSC_VER >= 1300 | |
91 | #define MY_NO_INLINE __declspec(noinline) | |
92 | #else | |
93 | #define MY_NO_INLINE | |
94 | #endif | |
95 | ||
96 | #define MY_CDECL __cdecl | |
5fe8380d | 97 | #define MY_FAST_CALL __fastcall |
caf72ff3 LCM |
98 | |
99 | #else | |
100 | ||
101 | #define MY_CDECL | |
caf72ff3 LCM |
102 | #define MY_FAST_CALL |
103 | ||
104 | #endif | |
105 | ||
106 | ||
107 | /* The following interfaces use first parameter as pointer to structure */ | |
108 | ||
5fe8380d SR |
109 | typedef struct |
110 | { | |
111 | Byte (*Read)(void *p); /* reads one byte, returns 0 in case of EOF or error */ | |
112 | } IByteIn; | |
113 | ||
114 | typedef struct | |
115 | { | |
116 | void (*Write)(void *p, Byte b); | |
117 | } IByteOut; | |
118 | ||
caf72ff3 LCM |
119 | typedef struct |
120 | { | |
121 | SRes (*Read)(void *p, void *buf, size_t *size); | |
122 | /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. | |
123 | (output(*size) < input(*size)) is allowed */ | |
124 | } ISeqInStream; | |
125 | ||
126 | /* it can return SZ_ERROR_INPUT_EOF */ | |
127 | SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size); | |
128 | SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType); | |
129 | SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf); | |
130 | ||
131 | typedef struct | |
132 | { | |
133 | size_t (*Write)(void *p, const void *buf, size_t size); | |
134 | /* Returns: result - the number of actually written bytes. | |
135 | (result < size) means error */ | |
136 | } ISeqOutStream; | |
137 | ||
138 | typedef enum | |
139 | { | |
140 | SZ_SEEK_SET = 0, | |
141 | SZ_SEEK_CUR = 1, | |
142 | SZ_SEEK_END = 2 | |
143 | } ESzSeek; | |
144 | ||
145 | typedef struct | |
146 | { | |
147 | SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ | |
148 | SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); | |
149 | } ISeekInStream; | |
150 | ||
151 | typedef struct | |
152 | { | |
5fe8380d | 153 | SRes (*Look)(void *p, const void **buf, size_t *size); |
caf72ff3 LCM |
154 | /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. |
155 | (output(*size) > input(*size)) is not allowed | |
156 | (output(*size) < input(*size)) is allowed */ | |
157 | SRes (*Skip)(void *p, size_t offset); | |
158 | /* offset must be <= output(*size) of Look */ | |
159 | ||
160 | SRes (*Read)(void *p, void *buf, size_t *size); | |
161 | /* reads directly (without buffer). It's same as ISeqInStream::Read */ | |
162 | SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); | |
163 | } ILookInStream; | |
164 | ||
165 | SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size); | |
166 | SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); | |
167 | ||
168 | /* reads via ILookInStream::Read */ | |
169 | SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); | |
170 | SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); | |
171 | ||
172 | #define LookToRead_BUF_SIZE (1 << 14) | |
173 | ||
174 | typedef struct | |
175 | { | |
176 | ILookInStream s; | |
177 | ISeekInStream *realStream; | |
178 | size_t pos; | |
179 | size_t size; | |
180 | Byte buf[LookToRead_BUF_SIZE]; | |
181 | } CLookToRead; | |
182 | ||
183 | void LookToRead_CreateVTable(CLookToRead *p, int lookahead); | |
184 | void LookToRead_Init(CLookToRead *p); | |
185 | ||
186 | typedef struct | |
187 | { | |
188 | ISeqInStream s; | |
189 | ILookInStream *realStream; | |
190 | } CSecToLook; | |
191 | ||
192 | void SecToLook_CreateVTable(CSecToLook *p); | |
193 | ||
194 | typedef struct | |
195 | { | |
196 | ISeqInStream s; | |
197 | ILookInStream *realStream; | |
198 | } CSecToRead; | |
199 | ||
200 | void SecToRead_CreateVTable(CSecToRead *p); | |
201 | ||
202 | typedef struct | |
203 | { | |
204 | SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); | |
205 | /* Returns: result. (result != SZ_OK) means break. | |
206 | Value (UInt64)(Int64)-1 for size means unknown value. */ | |
207 | } ICompressProgress; | |
208 | ||
209 | typedef struct | |
210 | { | |
211 | void *(*Alloc)(void *p, size_t size); | |
212 | void (*Free)(void *p, void *address); /* address can be 0 */ | |
213 | } ISzAlloc; | |
214 | ||
215 | #define IAlloc_Alloc(p, size) (p)->Alloc((p), size) | |
216 | #define IAlloc_Free(p, a) (p)->Free((p), a) | |
217 | ||
5fe8380d SR |
218 | #ifdef _WIN32 |
219 | ||
220 | #define CHAR_PATH_SEPARATOR '\\' | |
221 | #define WCHAR_PATH_SEPARATOR L'\\' | |
222 | #define STRING_PATH_SEPARATOR "\\" | |
223 | #define WSTRING_PATH_SEPARATOR L"\\" | |
224 | ||
225 | #else | |
226 | ||
227 | #define CHAR_PATH_SEPARATOR '/' | |
228 | #define WCHAR_PATH_SEPARATOR L'/' | |
229 | #define STRING_PATH_SEPARATOR "/" | |
230 | #define WSTRING_PATH_SEPARATOR L"/" | |
231 | ||
232 | #endif | |
233 | ||
caf72ff3 | 234 | #endif |