]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/Sdk/C/7zTypes.h
IntelFrameworkModulePkg Lzma: Update LZMA SDK version to 18.05
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / LzmaCustomDecompressLib / Sdk / C / 7zTypes.h
index 838dac766902873311226388755dba34c62c8759..a5fcb50baea300d8ffe3014ea01a9103ed84cbbe 100644 (file)
@@ -1,5 +1,5 @@
 /* 7zTypes.h -- Basic types\r
-2013-11-12 : Igor Pavlov : Public domain */\r
+2017-07-17 : Igor Pavlov : Public domain */\r
 \r
 #ifndef __7Z_TYPES_H\r
 #define __7Z_TYPES_H\r
@@ -46,13 +46,23 @@ EXTERN_C_BEGIN
 \r
 typedef int SRes;\r
 \r
+\r
 #ifdef _WIN32\r
+\r
 /* typedef DWORD WRes; */\r
 typedef unsigned WRes;\r
+#define MY_SRes_HRESULT_FROM_WRes(x) HRESULT_FROM_WIN32(x)\r
+\r
 #else\r
+\r
 typedef int WRes;\r
+#define MY__FACILITY_WIN32 7\r
+#define MY__FACILITY__WRes MY__FACILITY_WIN32\r
+#define MY_SRes_HRESULT_FROM_WRes(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (MY__FACILITY__WRes << 16) | 0x80000000)))\r
+\r
 #endif\r
 \r
+\r
 #ifndef RINOK\r
 #define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }\r
 #endif\r
@@ -116,48 +126,72 @@ typedef int Bool;
 #define MY_NO_INLINE\r
 #endif\r
 \r
+#define MY_FORCE_INLINE __forceinline\r
+\r
 #define MY_CDECL __cdecl\r
 #define MY_FAST_CALL __fastcall\r
 \r
 #else\r
 \r
 #define MY_NO_INLINE\r
+#define MY_FORCE_INLINE\r
 #define MY_CDECL\r
 #define MY_FAST_CALL\r
 \r
+/* inline keyword : for C++ / C99 */\r
+\r
+/* GCC, clang: */\r
+/*\r
+#if defined (__GNUC__) && (__GNUC__ >= 4)\r
+#define MY_FORCE_INLINE __attribute__((always_inline))\r
+#define MY_NO_INLINE __attribute__((noinline))\r
+#endif\r
+*/\r
+\r
 #endif\r
 \r
 \r
 /* The following interfaces use first parameter as pointer to structure */\r
 \r
-typedef struct\r
+typedef struct IByteIn IByteIn;\r
+struct IByteIn\r
 {\r
-  Byte (*Read)(void *p); /* reads one byte, returns 0 in case of EOF or error */\r
-} IByteIn;\r
+  Byte (*Read)(const IByteIn *p); /* reads one byte, returns 0 in case of EOF or error */\r
+};\r
+#define IByteIn_Read(p) (p)->Read(p)\r
 \r
-typedef struct\r
+\r
+typedef struct IByteOut IByteOut;\r
+struct IByteOut\r
 {\r
-  void (*Write)(void *p, Byte b);\r
-} IByteOut;\r
+  void (*Write)(const IByteOut *p, Byte b);\r
+};\r
+#define IByteOut_Write(p, b) (p)->Write(p, b)\r
 \r
-typedef struct\r
+\r
+typedef struct ISeqInStream ISeqInStream;\r
+struct ISeqInStream\r
 {\r
-  SRes (*Read)(void *p, void *buf, size_t *size);\r
+  SRes (*Read)(const ISeqInStream *p, void *buf, size_t *size);\r
     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.\r
        (output(*size) < input(*size)) is allowed */\r
-} ISeqInStream;\r
+};\r
+#define ISeqInStream_Read(p, buf, size) (p)->Read(p, buf, size)\r
 \r
 /* it can return SZ_ERROR_INPUT_EOF */\r
-SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size);\r
-SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType);\r
-SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf);\r
+SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size);\r
+SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType);\r
+SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf);\r
 \r
-typedef struct\r
+\r
+typedef struct ISeqOutStream ISeqOutStream;\r
+struct ISeqOutStream\r
 {\r
-  size_t (*Write)(void *p, const void *buf, size_t size);\r
+  size_t (*Write)(const ISeqOutStream *p, const void *buf, size_t size);\r
     /* Returns: result - the number of actually written bytes.\r
        (result < size) means error */\r
-} ISeqOutStream;\r
+};\r
+#define ISeqOutStream_Write(p, buf, size) (p)->Write(p, buf, size)\r
 \r
 typedef enum\r
 {\r
@@ -166,78 +200,162 @@ typedef enum
   SZ_SEEK_END = 2\r
 } ESzSeek;\r
 \r
-typedef struct\r
+\r
+typedef struct ISeekInStream ISeekInStream;\r
+struct ISeekInStream\r
 {\r
-  SRes (*Read)(void *p, void *buf, size_t *size);  /* same as ISeqInStream::Read */\r
-  SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);\r
-} ISeekInStream;\r
+  SRes (*Read)(const ISeekInStream *p, void *buf, size_t *size);  /* same as ISeqInStream::Read */\r
+  SRes (*Seek)(const ISeekInStream *p, Int64 *pos, ESzSeek origin);\r
+};\r
+#define ISeekInStream_Read(p, buf, size)   (p)->Read(p, buf, size)\r
+#define ISeekInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)\r
 \r
-typedef struct\r
+\r
+typedef struct ILookInStream ILookInStream;\r
+struct ILookInStream\r
 {\r
-  SRes (*Look)(void *p, const void **buf, size_t *size);\r
+  SRes (*Look)(const ILookInStream *p, const void **buf, size_t *size);\r
     /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.\r
        (output(*size) > input(*size)) is not allowed\r
        (output(*size) < input(*size)) is allowed */\r
-  SRes (*Skip)(void *p, size_t offset);\r
+  SRes (*Skip)(const ILookInStream *p, size_t offset);\r
     /* offset must be <= output(*size) of Look */\r
 \r
-  SRes (*Read)(void *p, void *buf, size_t *size);\r
+  SRes (*Read)(const ILookInStream *p, void *buf, size_t *size);\r
     /* reads directly (without buffer). It's same as ISeqInStream::Read */\r
-  SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin);\r
-} ILookInStream;\r
+  SRes (*Seek)(const ILookInStream *p, Int64 *pos, ESzSeek origin);\r
+};\r
 \r
-SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size);\r
-SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset);\r
+#define ILookInStream_Look(p, buf, size)   (p)->Look(p, buf, size)\r
+#define ILookInStream_Skip(p, offset)      (p)->Skip(p, offset)\r
+#define ILookInStream_Read(p, buf, size)   (p)->Read(p, buf, size)\r
+#define ILookInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)\r
+\r
+\r
+SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size);\r
+SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset);\r
 \r
 /* reads via ILookInStream::Read */\r
-SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType);\r
-SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size);\r
+SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType);\r
+SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size);\r
+\r
 \r
-#define LookToRead_BUF_SIZE (1 << 14)\r
 \r
 typedef struct\r
 {\r
-  ILookInStream s;\r
-  ISeekInStream *realStream;\r
+  ILookInStream vt;\r
+  const ISeekInStream *realStream;\r
\r
   size_t pos;\r
-  size_t size;\r
-  Byte buf[LookToRead_BUF_SIZE];\r
-} CLookToRead;\r
+  size_t size; /* it's data size */\r
+  \r
+  /* the following variables must be set outside */\r
+  Byte *buf;\r
+  size_t bufSize;\r
+} CLookToRead2;\r
+\r
+void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead);\r
+\r
+#define LookToRead2_Init(p) { (p)->pos = (p)->size = 0; }\r
 \r
-void LookToRead_CreateVTable(CLookToRead *p, int lookahead);\r
-void LookToRead_Init(CLookToRead *p);\r
 \r
 typedef struct\r
 {\r
-  ISeqInStream s;\r
-  ILookInStream *realStream;\r
+  ISeqInStream vt;\r
+  const ILookInStream *realStream;\r
 } CSecToLook;\r
 \r
 void SecToLook_CreateVTable(CSecToLook *p);\r
 \r
+\r
+\r
 typedef struct\r
 {\r
-  ISeqInStream s;\r
-  ILookInStream *realStream;\r
+  ISeqInStream vt;\r
+  const ILookInStream *realStream;\r
 } CSecToRead;\r
 \r
 void SecToRead_CreateVTable(CSecToRead *p);\r
 \r
-typedef struct\r
+\r
+typedef struct ICompressProgress ICompressProgress;\r
+\r
+struct ICompressProgress\r
 {\r
-  SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize);\r
+  SRes (*Progress)(const ICompressProgress *p, UInt64 inSize, UInt64 outSize);\r
     /* Returns: result. (result != SZ_OK) means break.\r
        Value (UInt64)(Int64)-1 for size means unknown value. */\r
-} ICompressProgress;\r
+};\r
+#define ICompressProgress_Progress(p, inSize, outSize) (p)->Progress(p, inSize, outSize)\r
 \r
-typedef struct\r
+\r
+\r
+typedef struct ISzAlloc ISzAlloc;\r
+typedef const ISzAlloc * ISzAllocPtr;\r
+\r
+struct ISzAlloc\r
 {\r
-  void *(*Alloc)(void *p, size_t size);\r
-  void (*Free)(void *p, void *address); /* address can be 0 */\r
-} ISzAlloc;\r
+  void *(*Alloc)(ISzAllocPtr p, size_t size);\r
+  void (*Free)(ISzAllocPtr p, void *address); /* address can be 0 */\r
+};\r
+\r
+#define ISzAlloc_Alloc(p, size) (p)->Alloc(p, size)\r
+#define ISzAlloc_Free(p, a) (p)->Free(p, a)\r
+\r
+/* deprecated */\r
+#define IAlloc_Alloc(p, size) ISzAlloc_Alloc(p, size)\r
+#define IAlloc_Free(p, a) ISzAlloc_Free(p, a)\r
+\r
+\r
+\r
+\r
+\r
+#ifndef MY_offsetof\r
+  #ifdef offsetof\r
+    #define MY_offsetof(type, m) offsetof(type, m)\r
+    /*\r
+    #define MY_offsetof(type, m) FIELD_OFFSET(type, m)\r
+    */\r
+  #else\r
+    #define MY_offsetof(type, m) ((size_t)&(((type *)0)->m))\r
+  #endif\r
+#endif\r
+\r
+\r
+\r
+#ifndef MY_container_of\r
+\r
+/*\r
+#define MY_container_of(ptr, type, m) container_of(ptr, type, m)\r
+#define MY_container_of(ptr, type, m) CONTAINING_RECORD(ptr, type, m)\r
+#define MY_container_of(ptr, type, m) ((type *)((char *)(ptr) - offsetof(type, m)))\r
+#define MY_container_of(ptr, type, m) (&((type *)0)->m == (ptr), ((type *)(((char *)(ptr)) - MY_offsetof(type, m))))\r
+*/\r
+\r
+/*\r
+  GCC shows warning: "perhaps the 'offsetof' macro was used incorrectly"\r
+    GCC 3.4.4 : classes with constructor\r
+    GCC 4.8.1 : classes with non-public variable members"\r
+*/\r
+\r
+#define MY_container_of(ptr, type, m) ((type *)((char *)(1 ? (ptr) : &((type *)0)->m) - MY_offsetof(type, m)))\r
+\r
+\r
+#endif\r
+\r
+#define CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(ptr))\r
+\r
+/*\r
+#define CONTAINER_FROM_VTBL(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)\r
+*/\r
+#define CONTAINER_FROM_VTBL(ptr, type, m) MY_container_of(ptr, type, m)\r
+\r
+#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)\r
+/*\r
+#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL(ptr, type, m)\r
+*/\r
+\r
 \r
-#define IAlloc_Alloc(p, size) (p)->Alloc((p), size)\r
-#define IAlloc_Free(p, a) (p)->Free((p), a)\r
 \r
 #ifdef _WIN32\r
 \r