zc->seqStore.maxNbSeq, zc->seqStore.maxNbLit,
zbuff, pledgedSrcSize) ) {
DEBUGLOG(4, "ZSTD_equivalentParams()==1 -> consider continue mode");
- if (ZSTD_cwksp_bump_oversized_duration(&zc->workspace) <= ZSTD_WORKSPACETOOLARGE_MAXDURATION) {
+ ZSTD_cwksp_bump_oversized_duration(&zc->workspace, 0);
+ if (!ZSTD_cwksp_check_wasteful(&zc->workspace, 0)) {
DEBUGLOG(4, "continue mode confirmed (wLog1=%u, blockSize1=%zu)",
zc->appliedParams.cParams.windowLog, zc->blockSize);
if (ZSTD_indexTooCloseToMax(zc->blockState.matchState.window)) {
return start;
}
-// TODO
-int ZSTD_cwksp_bump_oversized_duration(ZSTD_cwksp* ws) {
- (void)ws;
- // if (((BYTE*)ws->allocEnd - (BYTE*)ws->workspace) * ZSTD_WORKSPACETOOLARGE_FACTOR < (BYTE*)ws->workspaceEnd - (BYTE*)ws->workspace) {
- // ws->workspaceOversizedDuration++;
- // } else {
- // ws->workspaceOversizedDuration = 0;
- // }
- // return ws->workspaceOversizedDuration;
- return 0;
-}
-
/**
* Invalidates table allocations.
* All other allocations remain valid.
*/
void ZSTD_cwksp_clear(ZSTD_cwksp* ws) {
DEBUGLOG(3, "wksp: clearing!");
- ZSTD_cwksp_bump_oversized_duration(ws);
ws->tableEnd = ws->objectEnd;
ws->allocStart = ws->workspaceEnd;
ws->allocFailed = 0;
ZSTD_cwksp_clear(ws);
}
+size_t ZSTD_cwksp_sizeof(const ZSTD_cwksp* ws) {
+ return (BYTE*)ws->workspaceEnd - (BYTE*)ws->workspace;
+}
+
+int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp* ws) {
+ return ws->allocFailed;
+}
+
size_t ZSTD_cwksp_available_space(ZSTD_cwksp* ws) {
return (size_t)((BYTE*)ws->allocStart - (BYTE*)ws->tableEnd);
}
-int ZSTD_cwksp_check_available(ZSTD_cwksp* ws, size_t minFree) {
- return ZSTD_cwksp_available_space(ws) >= minFree;
+void ZSTD_cwksp_bump_oversized_duration(
+ ZSTD_cwksp* ws, size_t additionalNeededSpace) {
+ if (ZSTD_cwksp_check_too_large(ws, additionalNeededSpace)) {
+ ws->workspaceOversizedDuration++;
+ } else {
+ ws->workspaceOversizedDuration = 0;
+ }
}
-int ZSTD_cwksp_check_wasteful(ZSTD_cwksp* ws, size_t minFree) {
- return ZSTD_cwksp_check_available(ws, minFree * ZSTD_WORKSPACETOOLARGE_FACTOR) && ws->workspaceOversizedDuration > ZSTD_WORKSPACETOOLARGE_MAXDURATION;
+int ZSTD_cwksp_check_available(ZSTD_cwksp* ws, size_t additionalNeededSpace) {
+ return ZSTD_cwksp_available_space(ws) >= additionalNeededSpace;
}
-size_t ZSTD_cwksp_sizeof(const ZSTD_cwksp* ws) {
- return (BYTE*)ws->workspaceEnd - (BYTE*)ws->workspace;
+int ZSTD_cwksp_check_too_large(ZSTD_cwksp* ws, size_t additionalNeededSpace) {
+ return ZSTD_cwksp_check_available(
+ ws, additionalNeededSpace * ZSTD_WORKSPACETOOLARGE_FACTOR);
}
-int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp* ws) {
- return ws->allocFailed;
+int ZSTD_cwksp_check_wasteful(ZSTD_cwksp* ws, size_t additionalNeededSpace) {
+ return ZSTD_cwksp_check_too_large(ws, additionalNeededSpace)
+ && ws->workspaceOversizedDuration > ZSTD_WORKSPACETOOLARGE_MAXDURATION;
}
#if defined (__cplusplus)
*/
void* ZSTD_cwksp_reserve_object(ZSTD_cwksp* ws, size_t bytes);
-int ZSTD_cwksp_bump_oversized_duration(ZSTD_cwksp* ws);
-
/**
* Invalidates table allocations.
* All other allocations remain valid.
void ZSTD_cwksp_free(ZSTD_cwksp* ws, ZSTD_customMem customMem);
+size_t ZSTD_cwksp_sizeof(const ZSTD_cwksp* ws);
+
+int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp* ws);
+
+/*-*************************************
+* Functions Checking Free Space
+***************************************/
+
size_t ZSTD_cwksp_available_space(ZSTD_cwksp* ws);
-int ZSTD_cwksp_check_available(ZSTD_cwksp* ws, size_t minFree);
+int ZSTD_cwksp_check_available(ZSTD_cwksp* ws, size_t additionalNeededSpace);
-int ZSTD_cwksp_check_wasteful(ZSTD_cwksp* ws, size_t minFree);
+int ZSTD_cwksp_check_too_large(ZSTD_cwksp* ws, size_t additionalNeededSpace);
-size_t ZSTD_cwksp_sizeof(const ZSTD_cwksp* ws);
+int ZSTD_cwksp_check_wasteful(ZSTD_cwksp* ws, size_t additionalNeededSpace);
-int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp* ws);
+void ZSTD_cwksp_bump_oversized_duration(ZSTD_cwksp* ws, size_t additionalNeededSpace);
#if defined (__cplusplus)
}