private static void MatchFinderMt3_Skip(CMatchFinderMt p, uint num) { do { if (p.mBtBufPos == p.mBtBufPosLimit) { p.MatchFinderMt_GetNextBlock_Bt(); } if (p.mBtNumAvailBytes-- >= 3) { P <byte> cur = p.mPointerToCurPos; uint[] hash = p.mLocalHash; uint temp = cur[0].CRC() ^ cur[1]; uint hash2Value = temp & (kHash2Size - 1); uint hash3Value = (temp ^ ((uint)cur[2] << 8)) & (kHash3Size - 1); hash[kFix3HashSize + hash3Value] = p.mLzPos; hash[hash2Value] = p.mLzPos; } p.mLzPos++; p.mPointerToCurPos++; p.mBtBufPos += p.mBtBuf[p.mBtBufPos] + 1; }while (--num != 0); }
private static void MatchFinderMt0_Skip(CMatchFinderMt p, uint num) { do { if (p.mBtBufPos == p.mBtBufPosLimit) { p.MatchFinderMt_GetNextBlock_Bt(); } p.mBtNumAvailBytes--; p.mLzPos++; p.mPointerToCurPos++; p.mBtBufPos += p.mBtBuf[p.mBtBufPos] + 1; }while (--num != 0); }
private static void MatchFinderMt2_Skip(CMatchFinderMt p, uint num) { do { if (p.mBtBufPos == p.mBtBufPosLimit) { p.MatchFinderMt_GetNextBlock_Bt(); } if (p.mBtNumAvailBytes-- >= 2) { P <byte> cur = p.mPointerToCurPos; uint[] hash = p.mLocalHash; uint hash2Value = (cur[0].CRC() ^ cur[1]) & (kHash2Size - 1); hash[hash2Value] = p.mLzPos; } p.mLzPos++; p.mPointerToCurPos++; p.mBtBufPos += p.mBtBuf[p.mBtBufPos] + 1; }while (--num != 0); }
private static void MatchFinderMt4_Skip(CMatchFinderMt p, uint count) { do { if(p.mBtBufPos == p.mBtBufPosLimit) p.MatchFinderMt_GetNextBlock_Bt(); if(p.mBtNumAvailBytes-- >= 4) { P<byte> cur = p.mPointerToCurPos; uint[] hash = p.mHash; uint temp = cur[0].CRC() ^ cur[1]; uint hash2Value = temp & (kHash2Size - 1); uint hash3Value = (temp ^ ((uint)cur[2] << 8)) & (kHash3Size - 1); uint hash4Value = (temp ^ ((uint)cur[2] << 8) ^ (cur[3].CRC() << 5)) & (kHash4Size - 1); hash[kFix4HashSize + hash4Value] = p.mLzPos; hash[kFix3HashSize + hash3Value] = p.mLzPos; hash[hash2Value] = p.mLzPos; } p.mLzPos++; p.mPointerToCurPos++; p.mBtBufPos += p.mBtBuf[p.mBtBufPos] + 1; } while(--count != 0); }
private static void MatchFinderMt2_Skip(CMatchFinderMt p, uint num) { do { if(p.mBtBufPos == p.mBtBufPosLimit) p.MatchFinderMt_GetNextBlock_Bt(); if(p.mBtNumAvailBytes-- >= 2) { P<byte> cur = p.mPointerToCurPos; uint[] hash = p.mLocalHash; uint hash2Value = (cur[0].CRC() ^ cur[1]) & (kHash2Size - 1); hash[hash2Value] = p.mLzPos; } p.mLzPos++; p.mPointerToCurPos++; p.mBtBufPos += p.mBtBuf[p.mBtBufPos] + 1; } while(--num != 0); }
private static void MatchFinderMt0_Skip(CMatchFinderMt p, uint num) { do { if(p.mBtBufPos == p.mBtBufPosLimit) p.MatchFinderMt_GetNextBlock_Bt(); p.mBtNumAvailBytes--; p.mLzPos++; p.mPointerToCurPos++; p.mBtBufPos += p.mBtBuf[p.mBtBufPos] + 1; } while(--num != 0); }