mirror of
https://github.com/facebook/zstd.git
synced 2025-10-09 00:05:28 -04:00
Add block splitter to experimental params
This commit is contained in:
parent
2949a95224
commit
c56d6e49e8
@ -486,6 +486,11 @@ ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
|
|||||||
bounds.upperBound = 1;
|
bounds.upperBound = 1;
|
||||||
return bounds;
|
return bounds;
|
||||||
|
|
||||||
|
case ZSTD_c_splitBlocks:
|
||||||
|
bounds.lowerBound = 0;
|
||||||
|
bounds.upperBound = 1;
|
||||||
|
return bounds;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
bounds.error = ERROR(parameter_unsupported);
|
bounds.error = ERROR(parameter_unsupported);
|
||||||
return bounds;
|
return bounds;
|
||||||
@ -547,6 +552,7 @@ static int ZSTD_isUpdateAuthorized(ZSTD_cParameter param)
|
|||||||
case ZSTD_c_stableOutBuffer:
|
case ZSTD_c_stableOutBuffer:
|
||||||
case ZSTD_c_blockDelimiters:
|
case ZSTD_c_blockDelimiters:
|
||||||
case ZSTD_c_validateSequences:
|
case ZSTD_c_validateSequences:
|
||||||
|
case ZSTD_c_splitBlocks:
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -599,6 +605,7 @@ size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value)
|
|||||||
case ZSTD_c_stableOutBuffer:
|
case ZSTD_c_stableOutBuffer:
|
||||||
case ZSTD_c_blockDelimiters:
|
case ZSTD_c_blockDelimiters:
|
||||||
case ZSTD_c_validateSequences:
|
case ZSTD_c_validateSequences:
|
||||||
|
case ZSTD_c_splitBlocks:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
||||||
@ -810,6 +817,11 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams,
|
|||||||
CCtxParams->validateSequences = value;
|
CCtxParams->validateSequences = value;
|
||||||
return CCtxParams->validateSequences;
|
return CCtxParams->validateSequences;
|
||||||
|
|
||||||
|
case ZSTD_c_splitBlocks:
|
||||||
|
BOUNDCHECK(ZSTD_c_splitBlocks, value);
|
||||||
|
CCtxParams->splitBlocks = value;
|
||||||
|
return CCtxParams->splitBlocks;
|
||||||
|
|
||||||
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -933,6 +945,9 @@ size_t ZSTD_CCtxParams_getParameter(
|
|||||||
case ZSTD_c_validateSequences :
|
case ZSTD_c_validateSequences :
|
||||||
*value = (int)CCtxParams->validateSequences;
|
*value = (int)CCtxParams->validateSequences;
|
||||||
break;
|
break;
|
||||||
|
case ZSTD_c_splitBlocks :
|
||||||
|
*value = (int)CCtxParams->splitBlocks;
|
||||||
|
break;
|
||||||
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -3293,7 +3308,8 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
|
|||||||
nbSeq = (size_t)(zc->seqStore.sequences - zc->seqStore.sequencesStart);
|
nbSeq = (size_t)(zc->seqStore.sequences - zc->seqStore.sequencesStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nbSeq >= 2) {
|
zc->appliedParams.splitBlocks = 1; /* remove */
|
||||||
|
if (zc->appliedParams.splitBlocks && nbSeq >= 2) {
|
||||||
size_t splitBlocksCompressedSize;
|
size_t splitBlocksCompressedSize;
|
||||||
splitBlocksCompressedSize = ZSTD_compressBlock_splitBlock(zc, dst, dstCapacity, src, srcSize, frame, lastBlock, nbSeq);
|
splitBlocksCompressedSize = ZSTD_compressBlock_splitBlock(zc, dst, dstCapacity, src, srcSize, frame, lastBlock, nbSeq);
|
||||||
if (splitBlocksCompressedSize != 0) {
|
if (splitBlocksCompressedSize != 0) {
|
||||||
|
@ -312,6 +312,9 @@ struct ZSTD_CCtx_params_s {
|
|||||||
ZSTD_sequenceFormat_e blockDelimiters;
|
ZSTD_sequenceFormat_e blockDelimiters;
|
||||||
int validateSequences;
|
int validateSequences;
|
||||||
|
|
||||||
|
/* Block splitting */
|
||||||
|
int splitBlocks;
|
||||||
|
|
||||||
/* Internal use, for createCCtxParams() and freeCCtxParams() only */
|
/* Internal use, for createCCtxParams() and freeCCtxParams() only */
|
||||||
ZSTD_customMem customMem;
|
ZSTD_customMem customMem;
|
||||||
}; /* typedef'd to ZSTD_CCtx_params within "zstd.h" */
|
}; /* typedef'd to ZSTD_CCtx_params within "zstd.h" */
|
||||||
|
11
lib/zstd.h
11
lib/zstd.h
@ -419,6 +419,7 @@ typedef enum {
|
|||||||
* ZSTD_c_stableOutBuffer
|
* ZSTD_c_stableOutBuffer
|
||||||
* ZSTD_c_blockDelimiters
|
* ZSTD_c_blockDelimiters
|
||||||
* ZSTD_c_validateSequences
|
* ZSTD_c_validateSequences
|
||||||
|
* ZSTD_c_splitBlocks
|
||||||
* Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
|
* Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
|
||||||
* note : never ever use experimentalParam? names directly;
|
* note : never ever use experimentalParam? names directly;
|
||||||
* also, the enums values themselves are unstable and can still change.
|
* also, the enums values themselves are unstable and can still change.
|
||||||
@ -434,7 +435,8 @@ typedef enum {
|
|||||||
ZSTD_c_experimentalParam9=1006,
|
ZSTD_c_experimentalParam9=1006,
|
||||||
ZSTD_c_experimentalParam10=1007,
|
ZSTD_c_experimentalParam10=1007,
|
||||||
ZSTD_c_experimentalParam11=1008,
|
ZSTD_c_experimentalParam11=1008,
|
||||||
ZSTD_c_experimentalParam12=1009
|
ZSTD_c_experimentalParam12=1009,
|
||||||
|
ZSTD_c_experimentalParam13=1010
|
||||||
} ZSTD_cParameter;
|
} ZSTD_cParameter;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -1834,6 +1836,13 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
|
|||||||
*/
|
*/
|
||||||
#define ZSTD_c_validateSequences ZSTD_c_experimentalParam12
|
#define ZSTD_c_validateSequences ZSTD_c_experimentalParam12
|
||||||
|
|
||||||
|
/* ZSTD_c_splitBlocks
|
||||||
|
* Default is 0 == disabled. Set to 1 to enable block splitting.
|
||||||
|
*
|
||||||
|
* Will attempt to split blocks in order to improve compression ratio at the cost of speed.
|
||||||
|
*/
|
||||||
|
#define ZSTD_c_splitBlocks ZSTD_c_experimentalParam13
|
||||||
|
|
||||||
/*! ZSTD_CCtx_getParameter() :
|
/*! ZSTD_CCtx_getParameter() :
|
||||||
* Get the requested compression parameter value, selected by enum ZSTD_cParameter,
|
* Get the requested compression parameter value, selected by enum ZSTD_cParameter,
|
||||||
* and store it into int* value.
|
* and store it into int* value.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user