contrib/python-zstandard/zstd/common/huf.h
changeset 30822 b54a2984cdd4
parent 30434 2e484bdea8c4
child 37495 b1fb341d8a61
equal deleted inserted replaced
30821:7005c03f7387 30822:b54a2984cdd4
    60 
    60 
    61 /**
    61 /**
    62 HUF_decompress() :
    62 HUF_decompress() :
    63     Decompress HUF data from buffer 'cSrc', of size 'cSrcSize',
    63     Decompress HUF data from buffer 'cSrc', of size 'cSrcSize',
    64     into already allocated buffer 'dst', of minimum size 'dstSize'.
    64     into already allocated buffer 'dst', of minimum size 'dstSize'.
    65     `dstSize` : **must** be the ***exact*** size of original (uncompressed) data.
    65     `originalSize` : **must** be the ***exact*** size of original (uncompressed) data.
    66     Note : in contrast with FSE, HUF_decompress can regenerate
    66     Note : in contrast with FSE, HUF_decompress can regenerate
    67            RLE (cSrcSize==1) and uncompressed (cSrcSize==dstSize) data,
    67            RLE (cSrcSize==1) and uncompressed (cSrcSize==dstSize) data,
    68            because it knows size to regenerate.
    68            because it knows size to regenerate.
    69     @return : size of regenerated data (== dstSize),
    69     @return : size of regenerated data (== originalSize),
    70               or an error code, which can be tested using HUF_isError()
    70               or an error code, which can be tested using HUF_isError()
    71 */
    71 */
    72 size_t HUF_decompress(void* dst,  size_t dstSize,
    72 size_t HUF_decompress(void* dst,  size_t originalSize,
    73                 const void* cSrc, size_t cSrcSize);
    73                 const void* cSrc, size_t cSrcSize);
    74 
    74 
    75 
    75 
    76 /* ****************************************
    76 /* ***   Tool functions *** */
    77 *  Tool functions
    77 #define HUF_BLOCKSIZE_MAX (128 * 1024)       /**< maximum input size for a single block compressed with HUF_compress */
    78 ******************************************/
       
    79 #define HUF_BLOCKSIZE_MAX (128 * 1024)
       
    80 size_t HUF_compressBound(size_t size);       /**< maximum compressed size (worst case) */
    78 size_t HUF_compressBound(size_t size);       /**< maximum compressed size (worst case) */
    81 
    79 
    82 /* Error Management */
    80 /* Error Management */
    83 unsigned    HUF_isError(size_t code);        /**< tells if a return value is an error code */
    81 unsigned    HUF_isError(size_t code);        /**< tells if a return value is an error code */
    84 const char* HUF_getErrorName(size_t code);   /**< provides error code string (useful for debugging) */
    82 const char* HUF_getErrorName(size_t code);   /**< provides error code string (useful for debugging) */
    85 
    83 
    86 
    84 
    87 /* *** Advanced function *** */
    85 /* ***   Advanced function   *** */
    88 
    86 
    89 /** HUF_compress2() :
    87 /** HUF_compress2() :
    90 *   Same as HUF_compress(), but offers direct control over `maxSymbolValue` and `tableLog` */
    88  *   Same as HUF_compress(), but offers direct control over `maxSymbolValue` and `tableLog` .
       
    89  *   `tableLog` must be `<= HUF_TABLELOG_MAX` . */
    91 size_t HUF_compress2 (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog);
    90 size_t HUF_compress2 (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog);
       
    91 
       
    92 /** HUF_compress4X_wksp() :
       
    93 *   Same as HUF_compress2(), but uses externally allocated `workSpace`, which must be a table of >= 1024 unsigned */
       
    94 size_t HUF_compress4X_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize);  /**< `workSpace` must be a table of at least 1024 unsigned */
       
    95 
    92 
    96 
    93 
    97 
    94 #ifdef HUF_STATIC_LINKING_ONLY
    98 #ifdef HUF_STATIC_LINKING_ONLY
    95 
    99 
    96 /* *** Dependencies *** */
   100 /* *** Dependencies *** */
    97 #include "mem.h"   /* U32 */
   101 #include "mem.h"   /* U32 */
    98 
   102 
    99 
   103 
   100 /* *** Constants *** */
   104 /* *** Constants *** */
   101 #define HUF_TABLELOG_ABSOLUTEMAX  16   /* absolute limit of HUF_MAX_TABLELOG. Beyond that value, code does not work */
   105 #define HUF_TABLELOG_ABSOLUTEMAX  15   /* absolute limit of HUF_MAX_TABLELOG. Beyond that value, code does not work */
   102 #define HUF_TABLELOG_MAX  12           /* max configured tableLog (for static allocation); can be modified up to HUF_ABSOLUTEMAX_TABLELOG */
   106 #define HUF_TABLELOG_MAX  12           /* max configured tableLog (for static allocation); can be modified up to HUF_ABSOLUTEMAX_TABLELOG */
   103 #define HUF_TABLELOG_DEFAULT  11       /* tableLog by default, when not specified */
   107 #define HUF_TABLELOG_DEFAULT  11       /* tableLog by default, when not specified */
   104 #define HUF_SYMBOLVALUE_MAX 255
   108 #define HUF_SYMBOLVALUE_MAX 255
   105 #if (HUF_TABLELOG_MAX > HUF_TABLELOG_ABSOLUTEMAX)
   109 #if (HUF_TABLELOG_MAX > HUF_TABLELOG_ABSOLUTEMAX)
   106 #  error "HUF_TABLELOG_MAX is too large !"
   110 #  error "HUF_TABLELOG_MAX is too large !"
   123 
   127 
   124 /* static allocation of HUF's DTable */
   128 /* static allocation of HUF's DTable */
   125 typedef U32 HUF_DTable;
   129 typedef U32 HUF_DTable;
   126 #define HUF_DTABLE_SIZE(maxTableLog)   (1 + (1<<(maxTableLog)))
   130 #define HUF_DTABLE_SIZE(maxTableLog)   (1 + (1<<(maxTableLog)))
   127 #define HUF_CREATE_STATIC_DTABLEX2(DTable, maxTableLog) \
   131 #define HUF_CREATE_STATIC_DTABLEX2(DTable, maxTableLog) \
   128         HUF_DTable DTable[HUF_DTABLE_SIZE((maxTableLog)-1)] = { ((U32)((maxTableLog)-1)*0x1000001) }
   132         HUF_DTable DTable[HUF_DTABLE_SIZE((maxTableLog)-1)] = { ((U32)((maxTableLog)-1) * 0x01000001) }
   129 #define HUF_CREATE_STATIC_DTABLEX4(DTable, maxTableLog) \
   133 #define HUF_CREATE_STATIC_DTABLEX4(DTable, maxTableLog) \
   130         HUF_DTable DTable[HUF_DTABLE_SIZE(maxTableLog)] = { ((U32)(maxTableLog)*0x1000001) }
   134         HUF_DTable DTable[HUF_DTABLE_SIZE(maxTableLog)] = { ((U32)(maxTableLog) * 0x01000001) }
   131 
   135 
   132 
   136 
   133 /* ****************************************
   137 /* ****************************************
   134 *  Advanced decompression functions
   138 *  Advanced decompression functions
   135 ******************************************/
   139 ******************************************/
   138 
   142 
   139 size_t HUF_decompress4X_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< decodes RLE and uncompressed */
   143 size_t HUF_decompress4X_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< decodes RLE and uncompressed */
   140 size_t HUF_decompress4X_hufOnly(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< considers RLE and uncompressed as errors */
   144 size_t HUF_decompress4X_hufOnly(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< considers RLE and uncompressed as errors */
   141 size_t HUF_decompress4X2_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< single-symbol decoder */
   145 size_t HUF_decompress4X2_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< single-symbol decoder */
   142 size_t HUF_decompress4X4_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< double-symbols decoder */
   146 size_t HUF_decompress4X4_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< double-symbols decoder */
   143 
       
   144 size_t HUF_decompress1X_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);
       
   145 size_t HUF_decompress1X2_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< single-symbol decoder */
       
   146 size_t HUF_decompress1X4_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< double-symbols decoder */
       
   147 
   147 
   148 
   148 
   149 /* ****************************************
   149 /* ****************************************
   150 *  HUF detailed API
   150 *  HUF detailed API
   151 ******************************************/
   151 ******************************************/
   167 size_t HUF_buildCTable (HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue, unsigned maxNbBits);
   167 size_t HUF_buildCTable (HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue, unsigned maxNbBits);
   168 size_t HUF_writeCTable (void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog);
   168 size_t HUF_writeCTable (void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog);
   169 size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable);
   169 size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable);
   170 
   170 
   171 
   171 
       
   172 /** HUF_buildCTable_wksp() :
       
   173  *  Same as HUF_buildCTable(), but using externally allocated scratch buffer.
       
   174  *  `workSpace` must be aligned on 4-bytes boundaries, and be at least as large as a table of 1024 unsigned.
       
   175  */
       
   176 size_t HUF_buildCTable_wksp (HUF_CElt* tree, const U32* count, U32 maxSymbolValue, U32 maxNbBits, void* workSpace, size_t wkspSize);
       
   177 
   172 /*! HUF_readStats() :
   178 /*! HUF_readStats() :
   173     Read compact Huffman tree, saved by HUF_writeCTable().
   179     Read compact Huffman tree, saved by HUF_writeCTable().
   174     `huffWeight` is destination buffer.
   180     `huffWeight` is destination buffer.
   175     @return : size read from `src` , or an error Code .
   181     @return : size read from `src` , or an error Code .
   176     Note : Needed by HUF_readCTable() and HUF_readDTableXn() . */
   182     Note : Needed by HUF_readCTable() and HUF_readDTableXn() . */
   206 
   212 
   207 
   213 
   208 /* single stream variants */
   214 /* single stream variants */
   209 
   215 
   210 size_t HUF_compress1X (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog);
   216 size_t HUF_compress1X (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog);
       
   217 size_t HUF_compress1X_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize);  /**< `workSpace` must be a table of at least 1024 unsigned */
   211 size_t HUF_compress1X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable);
   218 size_t HUF_compress1X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable);
   212 
   219 
   213 size_t HUF_decompress1X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /* single-symbol decoder */
   220 size_t HUF_decompress1X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /* single-symbol decoder */
   214 size_t HUF_decompress1X4 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /* double-symbol decoder */
   221 size_t HUF_decompress1X4 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /* double-symbol decoder */
   215 
   222 
   216 size_t HUF_decompress1X_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable);
   223 size_t HUF_decompress1X_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);
       
   224 size_t HUF_decompress1X2_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< single-symbol decoder */
       
   225 size_t HUF_decompress1X4_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize);   /**< double-symbols decoder */
       
   226 
       
   227 size_t HUF_decompress1X_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable);   /**< automatic selection of sing or double symbol decoder, based on DTable */
   217 size_t HUF_decompress1X2_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable);
   228 size_t HUF_decompress1X2_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable);
   218 size_t HUF_decompress1X4_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable);
   229 size_t HUF_decompress1X4_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable);
   219 
       
   220 
   230 
   221 #endif /* HUF_STATIC_LINKING_ONLY */
   231 #endif /* HUF_STATIC_LINKING_ONLY */
   222 
   232 
   223 
   233 
   224 #if defined (__cplusplus)
   234 #if defined (__cplusplus)