Zstd: La documentation de ZSTD_CCtx_reset () est trompeuse sur les paramètres

Créé le 1 avr. 2018  ·  3Commentaires  ·  Source: facebook/zstd

À partir de 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 nous regardons 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;
}

J'ai interprété que tous les paramètres sont revenus aux valeurs par défaut pour signifier que ZSTD_CCtx_params est réinitialisé aux valeurs par défaut , ce qui signifierait que les appelants devraient remplir ces paramètres après avoir appelé ZSTD_CCtx_reset() . Cependant, nous pouvons clairement voir à partir du code que seuls la phase de flux interne, la taille de la source promise et le dictionnaire sont réinitialisés. Les ZSTD_CCtx_params sont intacts.

Cette confusion m'a presque amené à ajouter un ZSTD_CCtx_setParametersUsingCCtxParams() après chaque appel ZSTD_CCtx_reset() .

Je pense que la documentation serait meilleure si elle clarifiait quels paramètres ont été et n'ont pas été touchés.

bug

Commentaire le plus utile

Je pense que nous devrions séparer la fonction de réinitialisation de la fonction d'effacement des paramètres. De nombreuses utilisations que je vois veulent utiliser les mêmes paramètres, mais il suffit de démarrer une nouvelle compression.

Et si nous gardions ZSTD_CCtx_reset() et que nous avions une nouvelle fonction appelée ZSTD_CCtx_resetParameters() ?

Tous les 3 commentaires

Merci pour le rapport très détaillé @indygreg .
Cette fonction n'est manifestement pas à la hauteur de sa définition.
Je pense que la définition est correcte, c'est la mise en œuvre qui ne l'est pas.
À réparer.

Je pense que nous devrions séparer la fonction de réinitialisation de la fonction d'effacement des paramètres. De nombreuses utilisations que je vois veulent utiliser les mêmes paramètres, mais il suffit de démarrer une nouvelle compression.

Et si nous gardions ZSTD_CCtx_reset() et que nous avions une nouvelle fonction appelée ZSTD_CCtx_resetParameters() ?

Ça me semble bien

Cette page vous a été utile?
0 / 5 - 0 notes