ZSTD_memset(fpstats, 0, sizeof(FPStats));
}
-FORCE_INLINE_TEMPLATE void addEvents_generic(Fingerprint* fp, const void* src, size_t srcSize, size_t samplingRate)
+FORCE_INLINE_TEMPLATE void
+addEvents_generic(Fingerprint* fp, const void* src, size_t srcSize, size_t samplingRate)
{
const char* p = (const char*)src;
size_t limit = srcSize - HASHLENGTH + 1;
fp->nbEvents += limit/samplingRate;
}
-#define ADDEVENTS_RATE(_rate) ZSTD_addEvents_##_rate
+FORCE_INLINE_TEMPLATE void
+recordFingerprint_generic(Fingerprint* fp, const void* src, size_t srcSize, size_t samplingRate)
+{
+ ZSTD_memset(fp, 0, sizeof(*fp));
+ addEvents_generic(fp, src, srcSize, samplingRate);
+}
-#define ZSTD_GEN_ADDEVENTS_SAMPLE(_rate) \
- static void ADDEVENTS_RATE(_rate)(Fingerprint* fp, const void* src, size_t srcSize) \
- { \
- addEvents_generic(fp, src, srcSize, _rate); \
- }
+typedef void (*RecordEvents_f)(Fingerprint* fp, const void* src, size_t srcSize);
-ZSTD_GEN_ADDEVENTS_SAMPLE(1)
-ZSTD_GEN_ADDEVENTS_SAMPLE(5)
-ZSTD_GEN_ADDEVENTS_SAMPLE(11)
+#define FP_RECORD_RATE(_rate) ZSTD_recordFingerprint_##_rate
+#define ZSTD_GEN_RECORD_FINGERPRINT_RATE(_rate) \
+ static void FP_RECORD_RATE(_rate)(Fingerprint* fp, const void* src, size_t srcSize) \
+ { \
+ recordFingerprint_generic(fp, src, srcSize, _rate); \
+ }
-typedef void (*addEvents_f)(Fingerprint* fp, const void* src, size_t srcSize);
+ZSTD_GEN_RECORD_FINGERPRINT_RATE(1)
+ZSTD_GEN_RECORD_FINGERPRINT_RATE(5)
+ZSTD_GEN_RECORD_FINGERPRINT_RATE(11)
-static void recordFingerprint(Fingerprint* fp, const void* src, size_t s, addEvents_f addEvents)
-{
- ZSTD_memset(fp, 0, sizeof(*fp));
- addEvents(fp, src, s);
-}
static U64 abs64(S64 s64) { return (U64)((s64 < 0) ? -s64 : s64); }
#define CHUNKSIZE (8 << 10)
/* Note: technically, we use CHUNKSIZE, so that's 8 KB */
static size_t ZSTD_splitBlock_byChunks(const void* src, size_t srcSize,
- size_t blockSizeMax, addEvents_f f,
+ size_t blockSizeMax, RecordEvents_f record_f,
void* workspace, size_t wkspSize)
{
FPStats* const fpstats = (FPStats*)workspace;
assert(wkspSize >= sizeof(FPStats)); (void)wkspSize;
initStats(fpstats);
- recordFingerprint(&fpstats->pastEvents, p, CHUNKSIZE, f);
+ record_f(&fpstats->pastEvents, p, CHUNKSIZE);
for (pos = CHUNKSIZE; pos <= blockSizeMax - CHUNKSIZE; pos += CHUNKSIZE) {
- recordFingerprint(&fpstats->newEvents, p + pos, CHUNKSIZE, f);
+ record_f(&fpstats->newEvents, p + pos, CHUNKSIZE);
if (compareFingerprints(&fpstats->pastEvents, &fpstats->newEvents, penalty)) {
return pos;
} else {
void* workspace, size_t wkspSize)
{
if (splitStrat == split_lvl3)
- return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(1), workspace, wkspSize);
+ return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, FP_RECORD_RATE(1), workspace, wkspSize);
if (splitStrat == split_lvl2)
- return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(5), workspace, wkspSize);
+ return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, FP_RECORD_RATE(5), workspace, wkspSize);
assert(splitStrat == split_lvl1);
- return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(11), workspace, wkspSize);
+ return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, FP_RECORD_RATE(11), workspace, wkspSize);
}