MCPcopy Create free account
hub / github.com/abbeycode/UnrarKit / decodeSymbol1

Method decodeSymbol1

Libraries/unrar/model.cpp:412–454  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

410
411
412inline bool RARPPM_CONTEXT::decodeSymbol1(ModelPPM *Model)
413{
414 Model->Coder.SubRange.scale=U.SummFreq;
415 RARPPM_STATE* p=U.Stats;
416 int i, HiCnt;
417 int count=Model->Coder.GetCurrentCount();
418 if (count>=(int)Model->Coder.SubRange.scale)
419 return(false);
420 if (count < (HiCnt=p->Freq))
421 {
422 Model->PrevSuccess=(2*(Model->Coder.SubRange.HighCount=HiCnt) > Model->Coder.SubRange.scale);
423 Model->RunLength += Model->PrevSuccess;
424 (Model->FoundState=p)->Freq=(HiCnt += 4);
425 U.SummFreq += 4;
426 if (HiCnt > MAX_FREQ)
427 rescale(Model);
428 Model->Coder.SubRange.LowCount=0;
429 return(true);
430 }
431 else
432 if (Model->FoundState==NULL)
433 return(false);
434 Model->PrevSuccess=0;
435 i=NumStats-1;
436 while ((HiCnt += (++p)->Freq) <= count)
437 if (--i == 0)
438 {
439 Model->HiBitsFlag=Model->HB2Flag[Model->FoundState->Symbol];
440 Model->Coder.SubRange.LowCount=HiCnt;
441 Model->CharMask[p->Symbol]=Model->EscCount;
442 i=(Model->NumMasked=NumStats)-1;
443 Model->FoundState=NULL;
444 do
445 {
446 Model->CharMask[(--p)->Symbol]=Model->EscCount;
447 } while ( --i );
448 Model->Coder.SubRange.HighCount=Model->Coder.SubRange.scale;
449 return(true);
450 }
451 Model->Coder.SubRange.LowCount=(Model->Coder.SubRange.HighCount=HiCnt)-p->Freq;
452 update1(Model,p);
453 return(true);
454}
455
456
457inline void RARPPM_CONTEXT::update2(ModelPPM *Model,RARPPM_STATE* p)

Callers 1

DecodeCharMethod · 0.80

Calls 1

GetCurrentCountMethod · 0.80

Tested by

no test coverage detected