1 /* Types.h -- Basic types
\r
2 2010-10-09 : Igor Pavlov : Public domain */
\r
10 #include <windows.h>
\r
13 #ifndef EXTERN_C_BEGIN
\r
15 #define EXTERN_C_BEGIN extern "C" {
\r
16 #define EXTERN_C_END }
\r
18 #define EXTERN_C_BEGIN
\r
19 #define EXTERN_C_END
\r
27 #define SZ_ERROR_DATA 1
\r
28 #define SZ_ERROR_MEM 2
\r
29 #define SZ_ERROR_CRC 3
\r
30 #define SZ_ERROR_UNSUPPORTED 4
\r
31 #define SZ_ERROR_PARAM 5
\r
32 #define SZ_ERROR_INPUT_EOF 6
\r
33 #define SZ_ERROR_OUTPUT_EOF 7
\r
34 #define SZ_ERROR_READ 8
\r
35 #define SZ_ERROR_WRITE 9
\r
36 #define SZ_ERROR_PROGRESS 10
\r
37 #define SZ_ERROR_FAIL 11
\r
38 #define SZ_ERROR_THREAD 12
\r
40 #define SZ_ERROR_ARCHIVE 16
\r
41 #define SZ_ERROR_NO_ARCHIVE 17
\r
52 #define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
\r
55 typedef unsigned char Byte;
\r
56 typedef short Int16;
\r
57 typedef unsigned short UInt16;
\r
59 #ifdef _LZMA_UINT32_IS_ULONG
\r
61 typedef unsigned long UInt32;
\r
64 typedef unsigned int UInt32;
\r
67 #ifdef _SZ_NO_INT_64
\r
69 /* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
\r
70 NOTES: Some code will work incorrectly in that case! */
\r
73 typedef unsigned long UInt64;
\r
77 #if defined(_MSC_VER) || defined(__BORLANDC__)
\r
78 typedef __int64 Int64;
\r
79 typedef unsigned __int64 UInt64;
\r
80 #define UINT64_CONST(n) n
\r
82 typedef long long int Int64;
\r
83 typedef unsigned long long int UInt64;
\r
84 #define UINT64_CONST(n) n ## ULL
\r
89 #ifdef _LZMA_NO_SYSTEM_SIZE_T
\r
90 typedef UInt32 SizeT;
\r
92 typedef size_t SizeT;
\r
101 #define MY_STD_CALL __stdcall
\r
103 #define MY_STD_CALL
\r
108 #if _MSC_VER >= 1300
\r
109 #define MY_NO_INLINE __declspec(noinline)
\r
111 #define MY_NO_INLINE
\r
114 #define MY_CDECL __cdecl
\r
115 #define MY_FAST_CALL __fastcall
\r
120 #define MY_FAST_CALL
\r
125 /* The following interfaces use first parameter as pointer to structure */
\r
129 Byte (*Read)(void *p); /* reads one byte, returns 0 in case of EOF or error */
\r
134 void (*Write)(void *p, Byte b);
\r
139 SRes (*Read)(void *p, void *buf, size_t *size);
\r
140 /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
\r
141 (output(*size) < input(*size)) is allowed */
\r
144 /* it can return SZ_ERROR_INPUT_EOF */
\r
145 SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size);
\r
146 SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType);
\r
147 SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf);
\r
151 size_t (*Write)(void *p, const void *buf, size_t size);
\r
152 /* Returns: result - the number of actually written bytes.
\r
153 (result < size) means error */
\r
165 SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */
\r
166 SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
\r
171 SRes (*Look)(void *p, const void **buf, size_t *size);
\r
172 /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
\r
173 (output(*size) > input(*size)) is not allowed
\r
174 (output(*size) < input(*size)) is allowed */
\r
175 SRes (*Skip)(void *p, size_t offset);
\r
176 /* offset must be <= output(*size) of Look */
\r
178 SRes (*Read)(void *p, void *buf, size_t *size);
\r
179 /* reads directly (without buffer). It's same as ISeqInStream::Read */
\r
180 SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);
\r
183 SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size);
\r
184 SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset);
\r
186 /* reads via ILookInStream::Read */
\r
187 SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType);
\r
188 SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size);
\r
190 #define LookToRead_BUF_SIZE (1 << 14)
\r
195 ISeekInStream *realStream;
\r
198 Byte buf[LookToRead_BUF_SIZE];
\r
201 void LookToRead_CreateVTable(CLookToRead *p, int lookahead);
\r
202 void LookToRead_Init(CLookToRead *p);
\r
207 ILookInStream *realStream;
\r
210 void SecToLook_CreateVTable(CSecToLook *p);
\r
215 ILookInStream *realStream;
\r
218 void SecToRead_CreateVTable(CSecToRead *p);
\r
222 SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize);
\r
223 /* Returns: result. (result != SZ_OK) means break.
\r
224 Value (UInt64)(Int64)-1 for size means unknown value. */
\r
225 } ICompressProgress;
\r
229 void *(*Alloc)(void *p, size_t size);
\r
230 void (*Free)(void *p, void *address); /* address can be 0 */
\r
233 #define IAlloc_Alloc(p, size) (p)->Alloc((p), size)
\r
234 #define IAlloc_Free(p, a) (p)->Free((p), a)
\r
238 #define CHAR_PATH_SEPARATOR '\\'
\r
239 #define WCHAR_PATH_SEPARATOR L'\\'
\r
240 #define STRING_PATH_SEPARATOR "\\"
\r
241 #define WSTRING_PATH_SEPARATOR L"\\"
\r
245 #define CHAR_PATH_SEPARATOR '/'
\r
246 #define WCHAR_PATH_SEPARATOR L'/'
\r
247 #define STRING_PATH_SEPARATOR "/"
\r
248 #define WSTRING_PATH_SEPARATOR L"/"
\r