mirror of
				https://github.com/facebook/zstd.git
				synced 2025-11-03 20:33:11 +03:00 
			
		
		
		
	promoted streaming API to stable
(except _advanced() variants)
This commit is contained in:
		
							
								
								
									
										195
									
								
								lib/zstd.h
									
									
									
									
									
								
							
							
						
						
									
										195
									
								
								lib/zstd.h
									
									
									
									
									
								
							@@ -191,6 +191,107 @@ ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx,
 | 
			
		||||
                                        const ZSTD_DDict* ddict);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*-**************************
 | 
			
		||||
*  Streaming
 | 
			
		||||
****************************/
 | 
			
		||||
 | 
			
		||||
typedef struct ZSTD_inBuffer_s {
 | 
			
		||||
  const void* src;    /**< start of input buffer */
 | 
			
		||||
  size_t size;        /**< size of input buffer */
 | 
			
		||||
  size_t pos;         /**< position where reading stopped. Will be updated. Necessarily 0 <= pos <= size */
 | 
			
		||||
} ZSTD_inBuffer;
 | 
			
		||||
 | 
			
		||||
typedef struct ZSTD_outBuffer_s {
 | 
			
		||||
  void*  dst;         /**< start of output buffer */
 | 
			
		||||
  size_t size;        /**< size of output buffer */
 | 
			
		||||
  size_t pos;         /**< position where writing stopped. Will be updated. Necessarily 0 <= pos <= size */
 | 
			
		||||
} ZSTD_outBuffer;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*======   compression   ======*/
 | 
			
		||||
 | 
			
		||||
/*-***********************************************************************
 | 
			
		||||
*  Streaming compression - howto
 | 
			
		||||
*
 | 
			
		||||
*  A ZSTD_CStream object is required to track streaming operation.
 | 
			
		||||
*  Use ZSTD_createCStream() and ZSTD_freeCStream() to create/release resources.
 | 
			
		||||
*  ZSTD_CStream objects can be reused multiple times on consecutive compression operations.
 | 
			
		||||
*
 | 
			
		||||
*  Start by initializing ZSTD_CStream.
 | 
			
		||||
*  Use ZSTD_initCStream() to start a new compression operation.
 | 
			
		||||
*  Use ZSTD_initCStream_usingDict() for a compression which requires a dictionary.
 | 
			
		||||
*
 | 
			
		||||
*  Use ZSTD_compressStream() repetitively to consume input stream.
 | 
			
		||||
*  The function will automatically update both `pos`.
 | 
			
		||||
*  Note that it may not consume the entire input, in which case `pos < size`,
 | 
			
		||||
*  and it's up to the caller to present again remaining data.
 | 
			
		||||
*  @return : a hint to preferred nb of bytes to use as input for next function call (it's just a hint, to improve latency)
 | 
			
		||||
*            or an error code, which can be tested using ZSTD_isError().
 | 
			
		||||
*
 | 
			
		||||
*  At any moment, it's possible to flush whatever data remains within buffer, using ZSTD_flushStream().
 | 
			
		||||
*  `output->pos` will be updated.
 | 
			
		||||
*  Note some content might still be left within internal buffer if `output->size` is too small.
 | 
			
		||||
*  @return : nb of bytes still present within internal buffer (0 if it's empty)
 | 
			
		||||
*            or an error code, which can be tested using ZSTD_isError().
 | 
			
		||||
*
 | 
			
		||||
*  ZSTD_endStream() instructs to finish a frame.
 | 
			
		||||
*  It will perform a flush and write frame epilogue.
 | 
			
		||||
*  The epilogue is required for decoders to consider a frame completed.
 | 
			
		||||
*  Similar to ZSTD_flushStream(), it may not be able to flush the full content if `output->size` is too small.
 | 
			
		||||
*  In which case, call again ZSTD_endStream() to complete the flush.
 | 
			
		||||
*  @return : nb of bytes still present within internal buffer (0 if it's empty)
 | 
			
		||||
*            or an error code, which can be tested using ZSTD_isError().
 | 
			
		||||
*
 | 
			
		||||
* *******************************************************************/
 | 
			
		||||
 | 
			
		||||
typedef struct ZSTD_CStream_s ZSTD_CStream;
 | 
			
		||||
ZSTD_CStream* ZSTD_createCStream(void);
 | 
			
		||||
size_t ZSTD_freeCStream(ZSTD_CStream* zcs);
 | 
			
		||||
 | 
			
		||||
size_t ZSTD_CStreamInSize(void);    /**< recommended size for input buffer */
 | 
			
		||||
size_t ZSTD_CStreamOutSize(void);   /**< recommended size for output buffer */
 | 
			
		||||
 | 
			
		||||
size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel);
 | 
			
		||||
size_t ZSTD_compressStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input);
 | 
			
		||||
size_t ZSTD_flushStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output);
 | 
			
		||||
size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*======   decompression   ======*/
 | 
			
		||||
 | 
			
		||||
/*-***************************************************************************
 | 
			
		||||
*  Streaming decompression howto
 | 
			
		||||
*
 | 
			
		||||
*  A ZSTD_DStream object is required to track streaming operations.
 | 
			
		||||
*  Use ZSTD_createDStream() and ZSTD_freeDStream() to create/release resources.
 | 
			
		||||
*  ZSTD_DStream objects can be re-init multiple times.
 | 
			
		||||
*
 | 
			
		||||
*  Use ZSTD_initDStream() to start a new decompression operation,
 | 
			
		||||
*   or ZSTD_initDStream_usingDict() if decompression requires a dictionary.
 | 
			
		||||
*
 | 
			
		||||
*  Use ZSTD_decompressStream() repetitively to consume your input.
 | 
			
		||||
*  The function will update both `pos`.
 | 
			
		||||
*  Note that it may not consume the entire input (pos < size),
 | 
			
		||||
*  in which case it's up to the caller to present remaining input again.
 | 
			
		||||
*  @return : 0 when a frame is completely decoded and fully flushed,
 | 
			
		||||
*            1 when there is still some data left within internal buffer to flush,
 | 
			
		||||
*            >1 when more data is expected, with value being a suggested next input size (it's just a hint, which helps latency, any size is accepted),
 | 
			
		||||
*            or an error code, which can be tested using ZSTD_isError().
 | 
			
		||||
*
 | 
			
		||||
* *******************************************************************************/
 | 
			
		||||
 | 
			
		||||
typedef struct ZSTD_DStream_s ZSTD_DStream;
 | 
			
		||||
ZSTD_DStream* ZSTD_createDStream(void);
 | 
			
		||||
size_t ZSTD_freeDStream(ZSTD_DStream* zds);
 | 
			
		||||
 | 
			
		||||
size_t ZSTD_DStreamInSize(void);    /*!< recommended size for input buffer */
 | 
			
		||||
size_t ZSTD_DStreamOutSize(void);   /*!< recommended size for output buffer */
 | 
			
		||||
 | 
			
		||||
size_t ZSTD_initDStream(ZSTD_DStream* zds);
 | 
			
		||||
size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inBuffer* input);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef ZSTD_STATIC_LINKING_ONLY
 | 
			
		||||
 | 
			
		||||
/* ====================================================================================
 | 
			
		||||
@@ -321,110 +422,18 @@ ZSTDLIB_API size_t ZSTD_sizeofDCtx(const ZSTD_DCtx* dctx);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ******************************************************************
 | 
			
		||||
*  Streaming
 | 
			
		||||
*  Advanced Streaming
 | 
			
		||||
********************************************************************/
 | 
			
		||||
 | 
			
		||||
typedef struct ZSTD_inBuffer_s {
 | 
			
		||||
  const void* src;    /**< start of input buffer */
 | 
			
		||||
  size_t size;        /**< size of input buffer */
 | 
			
		||||
  size_t pos;         /**< position where reading stopped. Will be updated. Necessarily 0 <= pos <= size */
 | 
			
		||||
} ZSTD_inBuffer;
 | 
			
		||||
 | 
			
		||||
typedef struct ZSTD_outBuffer_s {
 | 
			
		||||
  void*  dst;         /**< start of output buffer */
 | 
			
		||||
  size_t size;        /**< size of output buffer */
 | 
			
		||||
  size_t pos;         /**< position where writing stopped. Will be updated. Necessarily 0 <= pos <= size */
 | 
			
		||||
} ZSTD_outBuffer;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*======   compression   ======*/
 | 
			
		||||
 | 
			
		||||
/*-***********************************************************************
 | 
			
		||||
*  Streaming compression - howto
 | 
			
		||||
*
 | 
			
		||||
*  A ZSTD_CStream object is required to track streaming operation.
 | 
			
		||||
*  Use ZSTD_createCStream() and ZSTD_freeCStream() to create/release resources.
 | 
			
		||||
*  ZSTD_CStream objects can be reused multiple times on consecutive compression operations.
 | 
			
		||||
*
 | 
			
		||||
*  Start by initializing ZSTD_CStream.
 | 
			
		||||
*  Use ZSTD_initCStream() to start a new compression operation.
 | 
			
		||||
*  Use ZSTD_initCStream_usingDict() for a compression which requires a dictionary.
 | 
			
		||||
*
 | 
			
		||||
*  Use ZSTD_compressStream() repetitively to consume input stream.
 | 
			
		||||
*  The function will automatically update both `pos`.
 | 
			
		||||
*  Note that it may not consume the entire input, in which case `pos < size`,
 | 
			
		||||
*  and it's up to the caller to present again remaining data.
 | 
			
		||||
*  @return : a hint to preferred nb of bytes to use as input for next function call (it's just a hint, to improve latency)
 | 
			
		||||
*            or an error code, which can be tested using ZSTD_isError().
 | 
			
		||||
*
 | 
			
		||||
*  At any moment, it's possible to flush whatever data remains within buffer, using ZSTD_flushStream().
 | 
			
		||||
*  `output->pos` will be updated.
 | 
			
		||||
*  Note some content might still be left within internal buffer if `output->size` is too small.
 | 
			
		||||
*  @return : nb of bytes still present within internal buffer (0 if it's empty)
 | 
			
		||||
*            or an error code, which can be tested using ZSTD_isError().
 | 
			
		||||
*
 | 
			
		||||
*  ZSTD_endStream() instructs to finish a frame.
 | 
			
		||||
*  It will perform a flush and write frame epilogue.
 | 
			
		||||
*  The epilogue is required for decoders to consider a frame completed.
 | 
			
		||||
*  Similar to ZSTD_flushStream(), it may not be able to flush the full content if `output->size` is too small.
 | 
			
		||||
*  In which case, call again ZSTD_endStream() to complete the flush.
 | 
			
		||||
*  @return : nb of bytes still present within internal buffer (0 if it's empty)
 | 
			
		||||
*            or an error code, which can be tested using ZSTD_isError().
 | 
			
		||||
*
 | 
			
		||||
* *******************************************************************/
 | 
			
		||||
 | 
			
		||||
typedef struct ZSTD_CStream_s ZSTD_CStream;
 | 
			
		||||
ZSTD_CStream* ZSTD_createCStream(void);
 | 
			
		||||
size_t ZSTD_freeCStream(ZSTD_CStream* zcs);
 | 
			
		||||
 | 
			
		||||
size_t ZSTD_CStreamInSize(void);    /**< recommended size for input buffer */
 | 
			
		||||
size_t ZSTD_CStreamOutSize(void);   /**< recommended size for output buffer */
 | 
			
		||||
 | 
			
		||||
size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel);
 | 
			
		||||
size_t ZSTD_compressStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input);
 | 
			
		||||
size_t ZSTD_flushStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output);
 | 
			
		||||
size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output);
 | 
			
		||||
 | 
			
		||||
/* advanced */
 | 
			
		||||
ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem);
 | 
			
		||||
size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, const void* dict, size_t dictSize, int compressionLevel);
 | 
			
		||||
size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, const void* dict, size_t dictSize,
 | 
			
		||||
                                 ZSTD_parameters params, unsigned long long pledgedSrcSize);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*======   decompression   ======*/
 | 
			
		||||
 | 
			
		||||
/*-***************************************************************************
 | 
			
		||||
*  Streaming decompression howto
 | 
			
		||||
*
 | 
			
		||||
*  A ZSTD_DStream object is required to track streaming operations.
 | 
			
		||||
*  Use ZSTD_createDStream() and ZSTD_freeDStream() to create/release resources.
 | 
			
		||||
*  ZSTD_DStream objects can be re-init multiple times.
 | 
			
		||||
*
 | 
			
		||||
*  Use ZSTD_initDStream() to start a new decompression operation,
 | 
			
		||||
*   or ZSTD_initDStream_usingDict() if decompression requires a dictionary.
 | 
			
		||||
*
 | 
			
		||||
*  Use ZSTD_decompressStream() repetitively to consume your input.
 | 
			
		||||
*  The function will update both `pos`.
 | 
			
		||||
*  Note that it may not consume the entire input (pos < size),
 | 
			
		||||
*  in which case it's up to the caller to present remaining input again.
 | 
			
		||||
*  @return : 0 when a frame is completely decoded and fully flushed,
 | 
			
		||||
*            1 when there is still some data left within internal buffer to flush,
 | 
			
		||||
*            >1 when more data is expected, with value being a suggested next input size (it's just a hint, which helps latency, any size is accepted),
 | 
			
		||||
*            or an error code, which can be tested using ZSTD_isError().
 | 
			
		||||
*
 | 
			
		||||
* *******************************************************************************/
 | 
			
		||||
 | 
			
		||||
typedef struct ZSTD_DStream_s ZSTD_DStream;
 | 
			
		||||
ZSTD_DStream* ZSTD_createDStream(void);
 | 
			
		||||
size_t ZSTD_freeDStream(ZSTD_DStream* zds);
 | 
			
		||||
 | 
			
		||||
size_t ZSTD_DStreamInSize(void);    /*!< recommended size for input buffer */
 | 
			
		||||
size_t ZSTD_DStreamOutSize(void);   /*!< recommended size for output buffer */
 | 
			
		||||
 | 
			
		||||
size_t ZSTD_initDStream(ZSTD_DStream* zds);
 | 
			
		||||
size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inBuffer* input);
 | 
			
		||||
 | 
			
		||||
/* advanced */
 | 
			
		||||
ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem);
 | 
			
		||||
size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user