All pastes #900829 Raw Edit

Stuff

public text v1 · immutable
·published 2008-02-12 05:40 UTC
rendered paste body
void GetNextToken(inputPtr *p, lzToken *pTok)
{
	uint8_t *pStart = p->p + p->pos;
	uint8_t *pBestFind=pStart;
	uint16_t bestLen=0;
	uint16_t histSize = (uint16_t)(GetHistSize(p));
	uint8_t *pHistStart = pStart-histSize;
	uint16_t i;
	uint16_t maxSearch;
	uint8_t len;
	if (histSize > 0){
		for(i=histSize-1;i>0;i--){//go backwards so we fins the closest
			maxSearch = rcMin(histSize+LOOKAHEAD_LEN-i-1,MAX_MATCH);
			if (maxSearch < 3)
				continue;
			len = matchlen(pStart,pHistStart+i,maxSearch);
			if ((len > 3) && (len > bestLen)){
				bestLen = len;
				pBestFind = pHistStart+i;
				if (len == MAX_MATCH)
					break;
				if (SKIP_PAST_MATCH && (i>len))
					i-=len;
			}
		}
	}
	pTok->length = bestLen;
	pTok->offset = (uint16_t)(pStart - pBestFind);
}