Zstd: La documentación de ZSTD_CCtx_reset () es engañosa sobre los parámetros

Creado en 1 abr. 2018  ·  3Comentarios  ·  Fuente: facebook/zstd

Desde zstd.h :

/*! ZSTD_CCtx_reset() :
 *  Return a CCtx to clean state.
 *  Useful after an error, or to interrupt an ongoing compression job and start a new one.
 *  Any internal data not yet flushed is cancelled.
 *  Dictionary (if any) is dropped.
 *  All parameters are back to default values.
 *  It's possible to modify compression parameters after a reset.
 */
ZSTDLIB_API void ZSTD_CCtx_reset(ZSTD_CCtx* cctx);

Si miramos zstd_compress.c :

static void ZSTD_startNewCompression(ZSTD_CCtx* cctx)
{
    cctx->streamStage = zcss_init;
    cctx->pledgedSrcSizePlusOne = 0;
}

/*! ZSTD_CCtx_reset() :
 *  Also dumps dictionary */
void ZSTD_CCtx_reset(ZSTD_CCtx* cctx)
{
    ZSTD_startNewCompression(cctx);
    cctx->cdict = NULL;
}

Interpreté que Todos los parámetros vuelven a los valores predeterminados para significar que ZSTD_CCtx_params se restablecen a los valores predeterminados , lo que significaría que las personas que llaman tendrían que volver a completar esos parámetros después de llamar a ZSTD_CCtx_reset() . Sin embargo, podemos ver claramente en el código que solo se restablecen la etapa de transmisión interna, el tamaño de fuente comprometido y el diccionario. Los ZSTD_CCtx_params están intactos.

Esta confusión casi me hizo agregar un ZSTD_CCtx_setParametersUsingCCtxParams() después de cada llamada ZSTD_CCtx_reset() .

Creo que la documentación sería mejor si aclarara qué parámetros se vieron afectados y cuáles no.

bug

Comentario más útil

Creo que deberíamos separar la función de reinicio de la función de borrar parámetros. Muchos usos que veo quieren usar los mismos parámetros, pero simplemente inicie una nueva compresión.

¿Qué pasa si mantenemos ZSTD_CCtx_reset() igual y tenemos una nueva función llamada ZSTD_CCtx_resetParameters() ?

Todos 3 comentarios

Gracias por un informe muy detallado @indygreg .
Esta función claramente no está a la altura de su definición.
Creo que la definición es correcta, es la implementación la que no lo es.
Ser arreglado.

Creo que deberíamos separar la función de reinicio de la función de borrar parámetros. Muchos usos que veo quieren usar los mismos parámetros, pero simplemente inicie una nueva compresión.

¿Qué pasa si mantenemos ZSTD_CCtx_reset() igual y tenemos una nueva función llamada ZSTD_CCtx_resetParameters() ?

Suena bien para mí

¿Fue útil esta página
0 / 5 - 0 calificaciones