Add function to apply cctx params

This commit is contained in:
Stella Lau 2017-08-18 13:01:55 -07:00
parent 81d89d82a6
commit 399ae013d4
2 changed files with 43 additions and 20 deletions

View File

@ -221,22 +221,6 @@ typedef struct seqDef_s {
U16 matchLength;
} seqDef;
typedef struct ZSTD_CCtx_params_s {
ZSTD_compressionParameters cParams;
ZSTD_frameParameters fParams;
int compressionLevel;
U32 forceWindow;
/* Dictionary */
ZSTD_dictMode_e dictMode;
U32 dictContentByRef;
/* Multithreading */
U32 nbThreads;
} ZSTD_CCtx_params;
typedef struct {
seqDef* sequencesStart;
seqDef* sequences;
@ -251,6 +235,24 @@ typedef struct {
U32 repToConfirm[ZSTD_REP_NUM];
} seqStore_t;
struct ZSTD_CCtx_params_s {
ZSTD_compressionParameters cParams;
ZSTD_frameParameters fParams;
int compressionLevel;
U32 forceWindow; /* force back-references to respect limit of 1<<wLog, even for dictionary */
/* Dictionary */
ZSTD_dictMode_e dictMode; /* select restricting dictionary to "rawContent" or "fullDict" only */
U32 dictContentByRef;
U32 nbThreads;
/* Multithreading: used only to set mtctx parameters */
unsigned jobSize;
unsigned overlapSizeLog;
};
typedef struct {
U32 off;
U32 len;

View File

@ -70,6 +70,7 @@ struct ZSTD_CDict_s {
ZSTD_CCtx* refContext;
}; /* typedef'd to ZSTD_CDict within "zstd.h" */
struct ZSTD_CCtx_s {
const BYTE* nextSrc; /* next block here to continue on current prefix */
const BYTE* base; /* All regular indexes relative to this position */
@ -558,21 +559,41 @@ size_t ZSTD_CCtxParam_setParameter(
return 0;
case ZSTD_p_jobSize :
// TODO
if (params->nbThreads <= 1) { return ERROR(parameter_unsupported); }
params->jobSize = value;
return 0;
case ZSTD_p_overlapSizeLog :
// TODO
params->overlapSizeLog = value;
return 0;
default: return ERROR(parameter_unsupported);
}
}
// This function should probably be updated whenever ZSTD_CCtx_params is updated.
ZSTDLIB_API size_t ZSTD_CCtx_applyCCtxParams(ZSTD_CCtx* cctx, ZSTD_CCtx_params* params)
{
(void)cctx;
(void)params;
if (cctx->cdict) { return ERROR(stage_wrong); }
/* Assume the compression and frame parameters are validated */
cctx->requestedParams.cParams = params->cParams;
cctx->requestedParams.fParams = params->fParams;
cctx->requestedParams.compressionLevel = params->compressionLevel;
/* Assume dictionary parameters are validated */
cctx->requestedParams.dictMode = params->dictMode;
cctx->requestedParams.dictContentByRef = params->dictContentByRef;
/* Set force window explicitly since it sets cctx->loadedDictEnd */
CHECK_F( ZSTD_CCtx_setParameter(
cctx, ZSTD_p_forceMaxWindow, params->forceWindow) );
/* Set multithreading parameters explicitly */
CHECK_F( ZSTD_CCtx_setParameter(cctx, ZSTD_p_nbThreads, params->nbThreads) );
CHECK_F( ZSTD_CCtx_setParameter(cctx, ZSTD_p_jobSize, params->jobSize) );
CHECK_F( ZSTD_CCtx_setParameter(
cctx, ZSTD_p_overlapSizeLog, params->overlapSizeLog) );
return 0;
}