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