more code

This commit is contained in:
Hongze Cheng 2022-09-26 17:56:47 +08:00
parent 787e166215
commit 4fdb37e887
1 changed files with 34 additions and 70 deletions

View File

@ -1191,6 +1191,26 @@ struct SCompressor {
}; };
}; };
static int32_t tTwoStageComp(SCompressor *pCmprsor, int32_t *szComp) {
int32_t code = 0;
if (pCmprsor->autoAlloc && (code = tRealloc(&pCmprsor->aBuf[0], pCmprsor->nBuf + 1))) {
return code;
}
*szComp = LZ4_compress_default(pCmprsor->pBuf, pCmprsor->aBuf[0] + 1, pCmprsor->nBuf, pCmprsor->nBuf);
if (*szComp && *szComp < pCmprsor->nBuf) {
pCmprsor->aBuf[0][0] = 1;
*szComp += 1;
} else {
pCmprsor->aBuf[0][0] = 0;
memcpy(pCmprsor->aBuf[0] + 1, pCmprsor->pBuf, pCmprsor->nBuf);
*szComp = pCmprsor->nBuf + 1;
}
return code;
}
// Timestamp ===================================================== // Timestamp =====================================================
static int32_t tCompTimestampStart(SCompressor *pCmprsor, int8_t type, int8_t cmprAlg) { static int32_t tCompTimestampStart(SCompressor *pCmprsor, int8_t type, int8_t cmprAlg) {
int32_t code = 0; int32_t code = 0;
@ -1205,7 +1225,7 @@ static int32_t tCompTimestampStart(SCompressor *pCmprsor, int8_t type, int8_t cm
return code; return code;
} }
static int32_t tCompSwitchToCopyMode(SCompressor *pCmprsor) { static int32_t tCompTSSwitchToCopy(SCompressor *pCmprsor) {
int32_t code = 0; int32_t code = 0;
if (pCmprsor->nVal == 0) goto _exit; if (pCmprsor->nVal == 0) goto _exit;
@ -1271,14 +1291,14 @@ static int32_t tCompTimestamp(SCompressor *pCmprsor, const void *pData, int32_t
} }
if (!I64_SAFE_ADD(ts, -pCmprsor->ts_prev_val)) { if (!I64_SAFE_ADD(ts, -pCmprsor->ts_prev_val)) {
code = tCompSwitchToCopyMode(pCmprsor); code = tCompTSSwitchToCopy(pCmprsor);
if (code) return code; if (code) return code;
goto _copy_cmpr; goto _copy_cmpr;
} }
int64_t delta = ts - pCmprsor->ts_prev_val; int64_t delta = ts - pCmprsor->ts_prev_val;
if (!I64_SAFE_ADD(delta, -pCmprsor->ts_prev_delta)) { if (!I64_SAFE_ADD(delta, -pCmprsor->ts_prev_delta)) {
code = tCompSwitchToCopyMode(pCmprsor); code = tCompTSSwitchToCopy(pCmprsor);
if (code) return code; if (code) return code;
goto _copy_cmpr; goto _copy_cmpr;
} }
@ -1328,25 +1348,14 @@ static int32_t tCompTimestampEnd(SCompressor *pCmprsor, const uint8_t **ppData,
int32_t code = 0; int32_t code = 0;
if (pCmprsor->nBuf >= sizeof(int64_t) * pCmprsor->nVal + 1 && pCmprsor->pBuf[0] == 1) { if (pCmprsor->nBuf >= sizeof(int64_t) * pCmprsor->nVal + 1 && pCmprsor->pBuf[0] == 1) {
code = tCompSwitchToCopyMode(pCmprsor); code = tCompTSSwitchToCopy(pCmprsor);
if (code) return code; if (code) return code;
} }
if (pCmprsor->cmprAlg == TWO_STAGE_COMP) { if (pCmprsor->cmprAlg == TWO_STAGE_COMP) {
if (pCmprsor->autoAlloc && (code = tRealloc(&pCmprsor->aBuf[0], pCmprsor->nBuf + 1))) { code = tTwoStageComp(pCmprsor, nData);
return code; if (code) return code;
}
*ppData = pCmprsor->aBuf[0]; *ppData = pCmprsor->aBuf[0];
int32_t szComp = LZ4_compress_default(pCmprsor->pBuf, pCmprsor->aBuf[0] + 1, pCmprsor->nBuf, pCmprsor->nBuf);
if (szComp && szComp < pCmprsor->nBuf) {
pCmprsor->aBuf[0][0] = 1;
*nData = szComp + 1;
} else {
pCmprsor->aBuf[0][0] = 0;
memcpy(pCmprsor->aBuf[0] + 1, pCmprsor->pBuf, pCmprsor->nBuf);
*nData = pCmprsor->nBuf + 1;
}
} else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) { } else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) {
*ppData = pCmprsor->pBuf; *ppData = pCmprsor->pBuf;
*nData = pCmprsor->nBuf; *nData = pCmprsor->nBuf;
@ -1498,20 +1507,9 @@ static int32_t tCompIntEnd(SCompressor *pCmprsor, const uint8_t **ppData, int32_
} }
if (pCmprsor->cmprAlg == TWO_STAGE_COMP) { if (pCmprsor->cmprAlg == TWO_STAGE_COMP) {
if (pCmprsor->autoAlloc && (code = tRealloc(&pCmprsor->aBuf[0], pCmprsor->nBuf + 1))) { code = tTwoStageComp(pCmprsor, nData);
return code; if (code) return code;
}
*ppData = pCmprsor->aBuf[0]; *ppData = pCmprsor->aBuf[0];
int32_t szComp = LZ4_compress_default(pCmprsor->pBuf, pCmprsor->aBuf[0] + 1, pCmprsor->nBuf, pCmprsor->nBuf);
if (szComp && szComp < pCmprsor->nBuf) {
pCmprsor->aBuf[0][0] = 1;
*nData = szComp + 1;
} else {
pCmprsor->aBuf[0][0] = 0;
memcpy(pCmprsor->aBuf[0] + 1, pCmprsor->pBuf, pCmprsor->nBuf);
*nData = pCmprsor->nBuf + 1;
}
} else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) { } else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) {
*ppData = pCmprsor->pBuf; *ppData = pCmprsor->pBuf;
*nData = pCmprsor->nBuf; *nData = pCmprsor->nBuf;
@ -1662,20 +1660,9 @@ static int32_t tCompFloatEnd(SCompressor *pCmprsor, const uint8_t **ppData, int3
} }
if (pCmprsor->cmprAlg == TWO_STAGE_COMP) { if (pCmprsor->cmprAlg == TWO_STAGE_COMP) {
if (pCmprsor->autoAlloc && (code = tRealloc(&pCmprsor->aBuf[0], pCmprsor->nBuf + 1))) { code = tTwoStageComp(pCmprsor, nData);
return code; if (code) return code;
}
*ppData = pCmprsor->aBuf[0]; *ppData = pCmprsor->aBuf[0];
int32_t szComp = LZ4_compress_default(pCmprsor->pBuf, pCmprsor->aBuf[0] + 1, pCmprsor->nBuf, pCmprsor->nBuf);
if (szComp && szComp < pCmprsor->nBuf) {
pCmprsor->aBuf[0][0] = 1;
*nData = szComp + 1;
} else {
pCmprsor->aBuf[0][0] = 0;
memcpy(pCmprsor->aBuf[0] + 1, pCmprsor->pBuf, pCmprsor->nBuf);
*nData = pCmprsor->nBuf + 1;
}
} else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) { } else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) {
*ppData = pCmprsor->pBuf; *ppData = pCmprsor->pBuf;
*nData = pCmprsor->nBuf; *nData = pCmprsor->nBuf;
@ -1826,20 +1813,9 @@ static int32_t tCompDoubleEnd(SCompressor *pCmprsor, const uint8_t **ppData, int
} }
if (pCmprsor->cmprAlg == TWO_STAGE_COMP) { if (pCmprsor->cmprAlg == TWO_STAGE_COMP) {
if (pCmprsor->autoAlloc && (code = tRealloc(&pCmprsor->aBuf[0], pCmprsor->nBuf + 1))) { code = tTwoStageComp(pCmprsor, nData);
return code; if (code) return code;
}
*ppData = pCmprsor->aBuf[0]; *ppData = pCmprsor->aBuf[0];
int32_t szComp = LZ4_compress_default(pCmprsor->pBuf, pCmprsor->aBuf[0] + 1, pCmprsor->nBuf, pCmprsor->nBuf);
if (szComp && szComp < pCmprsor->nBuf) {
pCmprsor->aBuf[0][0] = 1;
*nData = szComp + 1;
} else {
pCmprsor->aBuf[0][0] = 0;
memcpy(pCmprsor->aBuf[0] + 1, pCmprsor->pBuf, pCmprsor->nBuf);
*nData = pCmprsor->nBuf + 1;
}
} else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) { } else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) {
*ppData = pCmprsor->pBuf; *ppData = pCmprsor->pBuf;
*nData = pCmprsor->nBuf; *nData = pCmprsor->nBuf;
@ -1931,21 +1907,9 @@ static int32_t tCompBoolEnd(SCompressor *pCmprsor, const uint8_t **ppData, int32
int32_t code = 0; int32_t code = 0;
if (pCmprsor->cmprAlg == TWO_STAGE_COMP) { if (pCmprsor->cmprAlg == TWO_STAGE_COMP) {
if (pCmprsor->autoAlloc && (code = tRealloc(&pCmprsor->aBuf[0], pCmprsor->nBuf + 1))) { code = tTwoStageComp(pCmprsor, nData);
return code; if (code) return code;
}
*ppData = pCmprsor->aBuf[0]; *ppData = pCmprsor->aBuf[0];
int32_t szComp = LZ4_compress_default(pCmprsor->pBuf, pCmprsor->aBuf[0] + 1, pCmprsor->nBuf, pCmprsor->nBuf);
if (szComp && szComp < pCmprsor->nBuf) {
pCmprsor->aBuf[0][0] = 1;
*nData = szComp + 1;
} else {
pCmprsor->aBuf[0][0] = 0;
memcpy(pCmprsor->aBuf[0] + 1, pCmprsor->pBuf, pCmprsor->nBuf);
*nData = pCmprsor->nBuf + 1;
}
} else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) { } else if (pCmprsor->cmprAlg == ONE_STAGE_COMP) {
*ppData = pCmprsor->pBuf; *ppData = pCmprsor->pBuf;
*nData = pCmprsor->nBuf; *nData = pCmprsor->nBuf;