Zstandart(zstd) - how use fucntion ZSTD_CCtx_setParameter

200 views Asked by At

Tried to figure out how to restore values when using the ZSTD_CCtx setParameter function.

I understood only on the example of setting the compression level, like this for example:

cctx = ZSTD_createCCtx();

size_t ZSTD_CCtx_setParameter_ = ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, 22);

 status_error = ZSTD_isError(ZSTD_CCtx_setParameter_);

if (status_error != 0)
{
    std::cout<<ZSTD_getErrorName(ZSTD_CCtx_setParameter_)<<std::endl;
    return 1;
}

In this case, everything is clear - the Enum "ZSTD_c_compressionLevel" parameter is passed to the function and the compression level is set to choose from from 0 to 22.

But here's an example:

ZSTD_c_enableLongDistanceMatching; //Enable long distance matching.


cctx = ZSTD_createCCtx();

size_t ZSTD_CCtx_setParameter_ = ZSTD_CCtx_setParameter(cctx, ZSTD_c_enableLongDistanceMatching, ???);

And how to Enable it then?? What value should I set then?? The description doesn't say anything about it.

Tell me please.

1

There are 1 answers

0
Botje On BEST ANSWER

Use the source, Luke.

Right above the documentation for the ZSTD_CCtx_setParameter function is the following:

ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter cParam);

All parameters must belong to an interval with lower and upper bounds, otherwise they will either trigger an error or be automatically clamped. @return : a structure, ZSTD_bounds, which contains
- an error status field, which must be tested using ZSTD_isError()
- lower and upper bounds, both inclusive

And peering into the implementation of that function you can find the applicable lower and upper bounds:

    case ZSTD_c_enableLongDistanceMatching:
        bounds.lowerBound = (int)ZSTD_ps_auto;
        bounds.upperBound = (int)ZSTD_ps_disable;
        return bounds;

In summary, the answer to your question is:

ZSTD_CCtx_setParameter(cctx, ZSTD_c_enableLongDistanceMatching, (int)ZSTD_ps_enable);