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);
 | 
					                                        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
 | 
					#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   ======*/
 | 
					/*======   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);
 | 
					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_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,
 | 
					size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, const void* dict, size_t dictSize,
 | 
				
			||||||
                                 ZSTD_parameters params, unsigned long long pledgedSrcSize);
 | 
					                                 ZSTD_parameters params, unsigned long long pledgedSrcSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/*======   decompression   ======*/
 | 
					/*======   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 */
 | 
					/* advanced */
 | 
				
			||||||
ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem);
 | 
					ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem);
 | 
				
			||||||
size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize);
 | 
					size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user