From: Yann Collet Date: Tue, 9 May 2017 22:11:30 +0000 (-0700) Subject: regroup memory usage function declarations X-Git-Tag: v1.3.0~1^2~46^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a36c069e73d7c2297e44201c5eb7d758435208e;p=thirdparty%2Fzstd.git regroup memory usage function declarations in a single paragraph in zstd.h, for clarity --- diff --git a/doc/zstd_manual.html b/doc/zstd_manual.html index a5612c92c..c934da041 100644 --- a/doc/zstd_manual.html +++ b/doc/zstd_manual.html @@ -19,8 +19,8 @@
  • Streaming decompression - HowTo
  • START OF ADVANCED AND EXPERIMENTAL FUNCTIONS
  • Advanced types
  • -
  • Compressed size functions
  • -
  • Decompressed size functions
  • +
  • Frame size functions
  • +
  • Context memory usage
  • Advanced compression functions
  • Advanced decompression functions
  • Advanced streaming functions
  • @@ -325,63 +325,87 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB typedef void (*ZSTD_freeFunction) (void* opaque, void* address); typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void* opaque; } ZSTD_customMem;
    -

    Compressed size functions

    
    +

    Frame size functions

    
     
     
    size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize);
     

    `src` should point to the start of a ZSTD encoded frame or skippable frame `srcSize` must be at least as large as the frame - @return : the compressed size of the frame pointed to by `src`, suitable to pass to - `ZSTD_decompress` or similar, or an error code if given invalid input. + @return : the compressed size of the frame pointed to by `src`, + suitable to pass to `ZSTD_decompress` or similar, + or an error code if given invalid input.


    -

    Decompressed size functions

    
    -
    -
    unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize);
    -

    `src` should point to the start of a ZSTD encoded frame - `srcSize` must be at least as large as the frame header. A value greater than or equal - to `ZSTD_frameHeaderSize_max` is guaranteed to be large enough in all cases. - @return : decompressed size of the frame pointed to be `src` if known, otherwise - - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined - - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) +

    #define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1)
    +#define ZSTD_CONTENTSIZE_ERROR   (0ULL - 2)
    +unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize);
    +

    `src` should point to the start of a ZSTD encoded frame. + `srcSize` must be at least as large as the frame header. + A value >= `ZSTD_frameHeaderSize_max` is guaranteed to be large enough. + @return : - decompressed size of the frame pointed to be `src` if known + - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined + - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small)


    unsigned long long ZSTD_findDecompressedSize(const void* src, size_t srcSize);
    -

    `src` should point the start of a series of ZSTD encoded and/or skippable frames - `srcSize` must be the _exact_ size of this series +

    `src` should point the start of a series of ZSTD encoded and/or skippable frames + `srcSize` must be the _exact_ size of this series (i.e. there should be a frame boundary exactly `srcSize` bytes after `src`) - @return : the decompressed size of all data in the contained frames, as a 64-bit value _if known_ - - if the decompressed size cannot be determined: ZSTD_CONTENTSIZE_UNKNOWN - - if an error occurred: ZSTD_CONTENTSIZE_ERROR - - note 1 : decompressed size is an optional field, that may not be present, especially in streaming mode. - When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size. - In which case, it's necessary to use streaming mode to decompress data. - Optionally, application can still use ZSTD_decompress() while relying on implied limits. - (For example, data may be necessarily cut into blocks <= 16 KB). - note 2 : decompressed size is always present when compression is done with ZSTD_compress() - note 3 : decompressed size can be very large (64-bits value), - potentially larger than what local system can handle as a single memory segment. - In which case, it's necessary to use streaming mode to decompress data. - note 4 : If source is untrusted, decompressed size could be wrong or intentionally modified. - Always ensure result fits within application's authorized limits. - Each application can set its own limits. - note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to - read each contained frame header. This is efficient as most of the data is skipped, - however it does mean that all frame data must be present and valid. + @return : - decompressed size of all data in all successive frames + - if the decompressed size cannot be determined: ZSTD_CONTENTSIZE_UNKNOWN + - if an error occurred: ZSTD_CONTENTSIZE_ERROR + + note 1 : decompressed size is an optional field, that may not be present, especially in streaming mode. + When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size. + In which case, it's necessary to use streaming mode to decompress data. + Optionally, application can still use ZSTD_decompress() while relying on implied limits. + (For example, data may be necessarily cut into blocks <= 16 KB). + note 2 : decompressed size is always present when compression is done with ZSTD_compress() + note 3 : decompressed size can be very large (64-bits value), + potentially larger than what local system can handle as a single memory segment. + In which case, it's necessary to use streaming mode to decompress data. + note 4 : If source is untrusted, decompressed size could be wrong or intentionally modified. + Always ensure result fits within application's authorized limits. + Each application can set its own limits. + note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to + read each contained frame header. This is efficient as most of the data is skipped, + however it does mean that all frame data must be present and valid.


    -

    Advanced compression functions

    
    +

    Context memory usage

    
     
    -
    ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem);
    -

    Create a ZSTD compression context using external alloc and free functions +

    size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx);
    +size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx);
    +size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs);
    +size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds);
    +size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict);
    +size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
    +

    These functions give the current memory usage of selected object. + Object memory usage can evolve if it's re-used multiple times.


    size_t ZSTD_estimateCCtxSize(ZSTD_compressionParameters cParams);
    -

    Provides amount of memory needed to allocate ZSTD_CCtx with a set of compression parameters. +size_t ZSTD_estimateDCtxSize(void); +

    These functions make it possible to estimate memory usage + of a future target object, before its allocation, + given a set of parameters, which vary depending on target object. + The objective is to guide decision before allocation.


    -
    size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx);
    -

    amount of used memory is variable, depending primarily on compression level +

    size_t ZSTD_estimateCStreamSize(ZSTD_compressionParameters cParams);
    +

    Note : if streaming is init with function ZSTD_init?Stream_usingDict(), + an internal ?Dict will be created, which size is not estimated. + In this case, get additional size by using ZSTD_estimate?DictSize +


    + +
    size_t ZSTD_estimateCDictSize(ZSTD_compressionParameters cParams, size_t dictSize);
    +size_t ZSTD_estimateDDictSize(size_t dictSize);
    +

    Note : if dictionary is created "byReference", reduce estimation by dictSize +


    + +

    Advanced compression functions

    
    +
    +
    ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem);
    +

    Create a ZSTD compression context using external alloc and free functions


    typedef enum {
    @@ -405,15 +429,6 @@ typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; v
     

    Create a ZSTD_CDict using external alloc and free, and customized compression parameters


    -
    size_t ZSTD_estimateCDictSize(ZSTD_compressionParameters cParams, size_t dictSize);
    -

    Estimate amount of memory that will be needed to create a dictionary with following arguments - Note : if dictionary is created "byReference", reduce this amount by dictSize -


    - -
    size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict);
    -

    Gives the amount of memory used by a given ZSTD_sizeof_CDict -


    -
    ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize);
     

    @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize. `estimatedSrcSize` value is optional, select 0 if not known @@ -457,18 +472,10 @@ typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; v Note 3 : Skippable Frame Identifiers are considered valid.


    -
    size_t ZSTD_estimateDCtxSize(void);
    -

    Gives the potential amount of memory allocated to create a ZSTD_DCtx -


    -
    ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem);
     

    Create a ZSTD decompression context using external alloc and free functions


    -
    size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx);
    -

    Gives the amount of memory used by a given ZSTD_DCtx -


    -
    ZSTD_DDict* ZSTD_createDDict_byReference(const void* dictBuffer, size_t dictSize);
     

    Create a digested dictionary, ready to start decompression operation without startup delay. Dictionary content is simply referenced, and therefore stays in dictBuffer. @@ -480,15 +487,6 @@ typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; v

    Create a ZSTD_DDict using external alloc and free, optionally by reference


    -
    size_t ZSTD_estimateDDictSize(size_t dictSize);
    -

    Estimate amount of memory that will be needed to create a dictionary for decompression. - Note : if dictionary is created "byReference", reduce this amount by dictSize -


    - -
    size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
    -

    Gives the amount of memory used by a given ZSTD_DDict -


    -
    unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize);
     

    Provides the dictID stored within dictionary. if @return == 0, the dictionary is not conformant with Zstandard specification. @@ -516,12 +514,6 @@ typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; v

    Advanced streaming functions

    
     
     

    Advanced Streaming compression functions

    ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem);
    -/*! ZSTD_estimateCStreamSize() :
    - *  Provides amount of memory needed to allocate ZSTD_CStream with a set of compression parameters.
    - *  Special case : when using ZSTD_initCStream_usingDict(), init will transparently create an internal CDict.
    - *         Use ZSTD_estimateCDictSize() to estimate its size, and add for total CStream size */
    -size_t ZSTD_estimateCStreamSize(ZSTD_compressionParameters cParams);
    -size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs);   /**< same as ZSTD_sizeof_CCtx */
     size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, int compressionLevel, unsigned long long pledgedSrcSize);   /**< pledgedSrcSize must be correct, a size of 0 means unknown.  for a frame size of 0 use initCStream_advanced */
     size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, const void* dict, size_t dictSize, int compressionLevel); /**< note: a dict will not be used if dict == NULL or dictSize < 8. This result in the creation of an internal CDict */
     size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, const void* dict, size_t dictSize,
    @@ -540,11 +532,10 @@ size_t ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs, const ZSTD_CDict*
     
     

    Advanced Streaming decompression functions

    typedef enum { DStream_p_maxWindowSize } ZSTD_DStreamParameter_e;
     ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem);
    -size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize); /**< note: a dict will not be used if dict == NULL or dictSize < 8 */
     size_t ZSTD_setDStreamParameter(ZSTD_DStream* zds, ZSTD_DStreamParameter_e paramType, unsigned paramValue);
    +size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize); /**< note: a dict will not be used if dict == NULL or dictSize < 8 */
     size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDict* ddict);  /**< note : ddict will just be referenced, and must outlive decompression session */
     size_t ZSTD_resetDStream(ZSTD_DStream* zds);  /**< re-use decompression parameters from previous init; saves dictionary loading */
    -size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds);
     

    Buffer-less and synchronous inner streaming functions

       This is an advanced API, giving full control over buffer management, for users which need direct control over memory.
    diff --git a/lib/zstd.h b/lib/zstd.h
    index 86f1c4405..690c851f1 100644
    --- a/lib/zstd.h
    +++ b/lib/zstd.h
    @@ -350,9 +350,6 @@ ZSTDLIB_API size_t ZSTD_DStreamOutSize(void);   /*!< recommended size for output
     #define ZSTD_MAGICNUMBER            0xFD2FB528   /* >= v0.8.0 */
     #define ZSTD_MAGIC_SKIPPABLE_START  0x184D2A50U
     
    -#define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1)
    -#define ZSTD_CONTENTSIZE_ERROR   (0ULL - 2)
    -
     #define ZSTD_WINDOWLOG_MAX_32  27
     #define ZSTD_WINDOWLOG_MAX_64  27
     #define ZSTD_WINDOWLOG_MAX    ((unsigned)(sizeof(size_t) == 4 ? ZSTD_WINDOWLOG_MAX_32 : ZSTD_WINDOWLOG_MAX_64))
    @@ -407,54 +404,88 @@ typedef void  (*ZSTD_freeFunction) (void* opaque, void* address);
     typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void* opaque; } ZSTD_customMem;
     
     /***************************************
    -*  Compressed size functions
    +*  Frame size functions
     ***************************************/
     
     /*! ZSTD_findFrameCompressedSize() :
      *  `src` should point to the start of a ZSTD encoded frame or skippable frame
      *  `srcSize` must be at least as large as the frame
    - *  @return : the compressed size of the frame pointed to by `src`, suitable to pass to
    - *      `ZSTD_decompress` or similar, or an error code if given invalid input. */
    + *  @return : the compressed size of the frame pointed to by `src`,
    + *            suitable to pass to `ZSTD_decompress` or similar,
    + *            or an error code if given invalid input. */
     ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize);
     
    -/***************************************
    -*  Decompressed size functions
    -***************************************/
     /*! ZSTD_getFrameContentSize() :
    -*   `src` should point to the start of a ZSTD encoded frame
    -*   `srcSize` must be at least as large as the frame header.  A value greater than or equal
    -*       to `ZSTD_frameHeaderSize_max` is guaranteed to be large enough in all cases.
    -*   @return : decompressed size of the frame pointed to be `src` if known, otherwise
    -*             - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined
    -*             - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */
    + *  `src` should point to the start of a ZSTD encoded frame.
    + *  `srcSize` must be at least as large as the frame header.
    + *       A value >= `ZSTD_frameHeaderSize_max` is guaranteed to be large enough.
    + *  @return : - decompressed size of the frame pointed to be `src` if known
    + *            - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined
    + *            - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */
    +#define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1)
    +#define ZSTD_CONTENTSIZE_ERROR   (0ULL - 2)
     ZSTDLIB_API unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize);
     
     /*! ZSTD_findDecompressedSize() :
    -*   `src` should point the start of a series of ZSTD encoded and/or skippable frames
    -*   `srcSize` must be the _exact_ size of this series
    -*       (i.e. there should be a frame boundary exactly `srcSize` bytes after `src`)
    -*   @return : the decompressed size of all data in the contained frames, as a 64-bit value _if known_
    -*             - if the decompressed size cannot be determined: ZSTD_CONTENTSIZE_UNKNOWN
    -*             - if an error occurred: ZSTD_CONTENTSIZE_ERROR
    -*
    -*    note 1 : decompressed size is an optional field, that may not be present, especially in streaming mode.
    -*             When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size.
    -*             In which case, it's necessary to use streaming mode to decompress data.
    -*             Optionally, application can still use ZSTD_decompress() while relying on implied limits.
    -*             (For example, data may be necessarily cut into blocks <= 16 KB).
    -*    note 2 : decompressed size is always present when compression is done with ZSTD_compress()
    -*    note 3 : decompressed size can be very large (64-bits value),
    -*             potentially larger than what local system can handle as a single memory segment.
    -*             In which case, it's necessary to use streaming mode to decompress data.
    -*    note 4 : If source is untrusted, decompressed size could be wrong or intentionally modified.
    -*             Always ensure result fits within application's authorized limits.
    -*             Each application can set its own limits.
    -*    note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to
    -*             read each contained frame header.  This is efficient as most of the data is skipped,
    -*             however it does mean that all frame data must be present and valid. */
    + *  `src` should point the start of a series of ZSTD encoded and/or skippable frames
    + *  `srcSize` must be the _exact_ size of this series
    + *       (i.e. there should be a frame boundary exactly `srcSize` bytes after `src`)
    + *  @return : - decompressed size of all data in all successive frames
    + *            - if the decompressed size cannot be determined: ZSTD_CONTENTSIZE_UNKNOWN
    + *            - if an error occurred: ZSTD_CONTENTSIZE_ERROR
    + *
    + *   note 1 : decompressed size is an optional field, that may not be present, especially in streaming mode.
    + *            When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size.
    + *            In which case, it's necessary to use streaming mode to decompress data.
    + *            Optionally, application can still use ZSTD_decompress() while relying on implied limits.
    + *            (For example, data may be necessarily cut into blocks <= 16 KB).
    + *   note 2 : decompressed size is always present when compression is done with ZSTD_compress()
    + *   note 3 : decompressed size can be very large (64-bits value),
    + *            potentially larger than what local system can handle as a single memory segment.
    + *            In which case, it's necessary to use streaming mode to decompress data.
    + *   note 4 : If source is untrusted, decompressed size could be wrong or intentionally modified.
    + *            Always ensure result fits within application's authorized limits.
    + *            Each application can set its own limits.
    + *   note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to
    + *            read each contained frame header.  This is efficient as most of the data is skipped,
    + *            however it does mean that all frame data must be present and valid. */
     ZSTDLIB_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t srcSize);
     
     
    +/***************************************
    +*  Context memory usage
    +***************************************/
    +
    +/*! ZSTD_sizeof_*() :
    + *  These functions give the current memory usage of selected object.
    + *  Object memory usage can evolve if it's re-used multiple times. */
    +ZSTDLIB_API size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx);
    +ZSTDLIB_API size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx);
    +ZSTDLIB_API size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs);
    +ZSTDLIB_API size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds);
    +ZSTDLIB_API size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict);
    +ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
    +
    +/*! ZSTD_estimate*() :
    + *  These functions make it possible to estimate memory usage
    + *  of a future target object, before its allocation,
    + *  given a set of parameters, which vary depending on target object.
    + *  The objective is to guide decision before allocation. */
    +ZSTDLIB_API size_t ZSTD_estimateCCtxSize(ZSTD_compressionParameters cParams);
    +ZSTDLIB_API size_t ZSTD_estimateDCtxSize(void);
    +
    +/*! ZSTD_estimate?StreamSize() :
    + *  Note : if streaming is init with function ZSTD_init?Stream_usingDict(),
    + *         an internal ?Dict will be created, which size is not estimated.
    + *         In this case, get additional size by using ZSTD_estimate?DictSize */
    +ZSTDLIB_API size_t ZSTD_estimateCStreamSize(ZSTD_compressionParameters cParams);
    +
    +/*! ZSTD_estimate?DictSize() :
    + *  Note : if dictionary is created "byReference", reduce estimation by dictSize */
    +ZSTDLIB_API size_t ZSTD_estimateCDictSize(ZSTD_compressionParameters cParams, size_t dictSize);
    +ZSTDLIB_API size_t ZSTD_estimateDDictSize(size_t dictSize);
    +
    +
     /***************************************
     *  Advanced compression functions
     ***************************************/
    @@ -462,14 +493,6 @@ ZSTDLIB_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t
      *  Create a ZSTD compression context using external alloc and free functions */
     ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem);
     
    -/*! ZSTD_estimateCCtxSize() :
    - *  Provides amount of memory needed to allocate ZSTD_CCtx with a set of compression parameters. */
    -ZSTDLIB_API size_t ZSTD_estimateCCtxSize(ZSTD_compressionParameters cParams);
    -
    -/*! ZSTD_sizeofCCtx() :
    - *  amount of used memory is variable, depending primarily on compression level */
    -ZSTDLIB_API size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx);
    -
     typedef enum {
         ZSTD_p_forceWindow,   /* Force back-references to remain < windowSize, even when referencing Dictionary content (default:0) */
         ZSTD_p_forceRawDict   /* Force loading dictionary in "content-only" mode (no header analysis) */
    @@ -490,15 +513,6 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, siz
     ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictSize, unsigned byReference,
                                                       ZSTD_compressionParameters cParams, ZSTD_customMem customMem);
     
    -/*! ZSTD_estimateCDictSize() :
    - *  Estimate amount of memory that will be needed to create a dictionary with following arguments
    - *  Note : if dictionary is created "byReference", reduce this amount by dictSize */
    -ZSTDLIB_API size_t ZSTD_estimateCDictSize(ZSTD_compressionParameters cParams, size_t dictSize);
    -
    -/*! ZSTD_sizeof_CDict() :
    - *  Gives the amount of memory used by a given ZSTD_sizeof_CDict */
    -ZSTDLIB_API size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict);
    -
     /*! ZSTD_getCParams() :
     *   @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize.
     *   `estimatedSrcSize` value is optional, select 0 if not known */
    @@ -543,18 +557,10 @@ ZSTDLIB_API size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
      *  Note 3 : Skippable Frame Identifiers are considered valid. */
     ZSTDLIB_API unsigned ZSTD_isFrame(const void* buffer, size_t size);
     
    -/*! ZSTD_estimateDCtxSize() :
    - *  Gives the potential amount of memory allocated to create a ZSTD_DCtx */
    -ZSTDLIB_API size_t ZSTD_estimateDCtxSize(void);
    -
     /*! ZSTD_createDCtx_advanced() :
      *  Create a ZSTD decompression context using external alloc and free functions */
     ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem);
     
    -/*! ZSTD_sizeof_DCtx() :
    - *  Gives the amount of memory used by a given ZSTD_DCtx */
    -ZSTDLIB_API size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx);
    -
     /*! ZSTD_createDDict_byReference() :
      *  Create a digested dictionary, ready to start decompression operation without startup delay.
      *  Dictionary content is simply referenced, and therefore stays in dictBuffer.
    @@ -566,15 +572,6 @@ ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_byReference(const void* dictBuffer, siz
     ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictSize,
                                                       unsigned byReference, ZSTD_customMem customMem);
     
    -/*! ZSTD_estimateDDictSize() :
    - *  Estimate amount of memory that will be needed to create a dictionary for decompression.
    - *  Note : if dictionary is created "byReference", reduce this amount by dictSize */
    -ZSTDLIB_API size_t ZSTD_estimateDDictSize(size_t dictSize);
    -
    -/*! ZSTD_sizeof_DDict() :
    - *  Gives the amount of memory used by a given ZSTD_DDict */
    -ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
    -
     /*! ZSTD_getDictID_fromDict() :
      *  Provides the dictID stored within dictionary.
      *  if @return == 0, the dictionary is not conformant with Zstandard specification.
    @@ -606,12 +603,6 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize);
     
     /*=====   Advanced Streaming compression functions  =====*/
     ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem);
    -/*! ZSTD_estimateCStreamSize() :
    - *  Provides amount of memory needed to allocate ZSTD_CStream with a set of compression parameters.
    - *  Special case : when using ZSTD_initCStream_usingDict(), init will transparently create an internal CDict.
    - *         Use ZSTD_estimateCDictSize() to estimate its size, and add for total CStream size */
    -ZSTDLIB_API size_t ZSTD_estimateCStreamSize(ZSTD_compressionParameters cParams);
    -ZSTDLIB_API size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs);   /**< same as ZSTD_sizeof_CCtx */
     ZSTDLIB_API size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, int compressionLevel, unsigned long long pledgedSrcSize);   /**< pledgedSrcSize must be correct, a size of 0 means unknown.  for a frame size of 0 use initCStream_advanced */
     ZSTDLIB_API size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, const void* dict, size_t dictSize, int compressionLevel); /**< note: a dict will not be used if dict == NULL or dictSize < 8. This result in the creation of an internal CDict */
     ZSTDLIB_API size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, const void* dict, size_t dictSize,
    @@ -632,11 +623,10 @@ ZSTDLIB_API size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledg
     /*=====   Advanced Streaming decompression functions  =====*/
     typedef enum { DStream_p_maxWindowSize } ZSTD_DStreamParameter_e;
     ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem);
    -ZSTDLIB_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize); /**< note: a dict will not be used if dict == NULL or dictSize < 8 */
     ZSTDLIB_API size_t ZSTD_setDStreamParameter(ZSTD_DStream* zds, ZSTD_DStreamParameter_e paramType, unsigned paramValue);
    +ZSTDLIB_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize); /**< note: a dict will not be used if dict == NULL or dictSize < 8 */
     ZSTDLIB_API size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDict* ddict);  /**< note : ddict will just be referenced, and must outlive decompression session */
     ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds);  /**< re-use decompression parameters from previous init; saves dictionary loading */
    -ZSTDLIB_API size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds);
     
     
     /*********************************************************************