1 #include <stdio.h> /* fprintf */
2 #include <stdlib.h> /* malloc, free, qsort */
3 #include <string.h> /* memset */
4 #include <time.h> /* clock */
5 #include "mem.h" /* read */
8 #include "zstd_internal.h" /* includes zstd.h */
9 #ifndef ZDICT_STATIC_LINKING_ONLY
10 #define ZDICT_STATIC_LINKING_ONLY
15 * COVER_best_t is used for two purposes:
16 * 1. Synchronizing threads.
17 * 2. Saving the best parameters and dictionary.
19 * All of the methods except COVER_best_init() are thread safe if zstd is
20 * compiled with multithreaded support.
22 typedef struct COVER_best_s {
23 ZSTD_pthread_mutex_t mutex;
24 ZSTD_pthread_cond_t cond;
28 ZDICT_cover_params_t parameters;
29 size_t compressedSize;
33 * A segment is a range in the source as well as the score of the segment.
42 * Checks total compressed size of a dictionary
44 size_t COVER_checkTotalCompressedSize(const ZDICT_cover_params_t parameters,
45 const size_t *samplesSizes, const BYTE *samples,
47 size_t nbTrainSamples, size_t nbSamples,
48 BYTE *const dict, size_t dictBufferCapacity);
51 * Returns the sum of the sample sizes.
53 size_t COVER_sum(const size_t *samplesSizes, unsigned nbSamples) ;
56 * Initialize the `COVER_best_t`.
58 void COVER_best_init(COVER_best_t *best);
61 * Wait until liveJobs == 0.
63 void COVER_best_wait(COVER_best_t *best);
66 * Call COVER_best_wait() and then destroy the COVER_best_t.
68 void COVER_best_destroy(COVER_best_t *best);
71 * Called when a thread is about to be launched.
72 * Increments liveJobs.
74 void COVER_best_start(COVER_best_t *best);
77 * Called when a thread finishes executing, both on error or success.
78 * Decrements liveJobs and signals any waiting threads if liveJobs == 0.
79 * If this dictionary is the best so far save it and its parameters.
81 void COVER_best_finish(COVER_best_t *best, size_t compressedSize,
82 ZDICT_cover_params_t parameters, void *dict,