#ifndef ZDICT_STATIC_LINKING_ONLY
# define ZDICT_STATIC_LINKING_ONLY
#endif
#include "../common/threading.h"
#include "../common/mem.h"
#include "../zdict.h"
typedef struct COVER_best_s {
ZSTD_pthread_mutex_t mutex;
ZSTD_pthread_cond_t cond;
size_t liveJobs;
void *dict;
size_t dictSize;
ZDICT_cover_params_t parameters;
size_t compressedSize;
} COVER_best_t;
typedef struct {
U32 begin;
U32 end;
U32 score;
} COVER_segment_t;
typedef struct {
U32 num;
U32 size;
} COVER_epoch_info_t;
typedef struct COVER_dictSelection {
BYTE* dictContent;
size_t dictSize;
size_t totalCompressedSize;
} COVER_dictSelection_t;
COVER_epoch_info_t COVER_computeEpochs(U32 maxDictSize, U32 nbDmers,
U32 k, U32 passes);
void COVER_warnOnSmallCorpus(size_t maxDictSize, size_t nbDmers, int displayLevel);
size_t COVER_checkTotalCompressedSize(const ZDICT_cover_params_t parameters,
const size_t *samplesSizes, const BYTE *samples,
size_t *offsets,
size_t nbTrainSamples, size_t nbSamples,
BYTE *const dict, size_t dictBufferCapacity);
size_t COVER_sum(const size_t *samplesSizes, unsigned nbSamples) ;
void COVER_best_init(COVER_best_t *best);
void COVER_best_wait(COVER_best_t *best);
void COVER_best_destroy(COVER_best_t *best);
void COVER_best_start(COVER_best_t *best);
void COVER_best_finish(COVER_best_t *best, ZDICT_cover_params_t parameters,
COVER_dictSelection_t selection);
unsigned COVER_dictSelectionIsError(COVER_dictSelection_t selection);
COVER_dictSelection_t COVER_dictSelectionError(size_t error);
void COVER_dictSelectionFree(COVER_dictSelection_t selection);
COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBufferCapacity,
size_t dictContentSize, const BYTE* samplesBuffer, const size_t* samplesSizes, unsigned nbFinalizeSamples,
size_t nbCheckSamples, size_t nbSamples, ZDICT_cover_params_t params, size_t* offsets, size_t totalCompressedSize);