mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-04-02 10:42:14 -04:00
This is an experimental release, as such it is posted only to Google Code. Changelog: - 21fx API moved to pre-finalized form as S-MSU1; more about this on the forum - OpenGL driver now uses GL_CLAMP_TO_BORDER instead of GL_CLAMP_TO_EDGE to support screen curvature shader - rewrote file open dialog; code is greatly simplified, interface is improved - all cheat code columns are now enquoted, and empty codes at the bottom of the file are omitted (format is compatible with previous releases still) - debugger: added missing DMA variables to S-CPU properties viewer - snesfilter: added OpenMP (multi-threading) support to HQ2x filter - lots of other miscellaneous code cleanup work
49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
// #included by unpack.cpp
|
|
#ifdef RAR_COMMON_HPP
|
|
|
|
inline unsigned int RangeCoder::GetChar()
|
|
{
|
|
return(UnpackRead->GetChar());
|
|
}
|
|
|
|
|
|
void RangeCoder::InitDecoder(Unpack *UnpackRead)
|
|
{
|
|
RangeCoder::UnpackRead=UnpackRead;
|
|
|
|
low=code=0;
|
|
range=uint(-1);
|
|
for (int i=0;i < 4;i++)
|
|
code=(code << 8) | GetChar();
|
|
}
|
|
|
|
|
|
#define ARI_DEC_NORMALIZE(code,low,range,read) \
|
|
{ \
|
|
while ((low^(low+range))<TOP || range<BOT && ((range=-low&(BOT-1)),1)) \
|
|
{ \
|
|
code=(code << 8) | read->GetChar(); \
|
|
range <<= 8; \
|
|
low <<= 8; \
|
|
} \
|
|
}
|
|
|
|
|
|
inline int RangeCoder::GetCurrentCount()
|
|
{
|
|
return (code-low)/(range /= SubRange.scale);
|
|
}
|
|
|
|
|
|
inline uint RangeCoder::GetCurrentShiftCount(uint SHIFT)
|
|
{
|
|
return (code-low)/(range >>= SHIFT);
|
|
}
|
|
|
|
|
|
inline void RangeCoder::Decode()
|
|
{
|
|
low += range*SubRange.LowCount;
|
|
range *= SubRange.HighCount-SubRange.LowCount;
|
|
}
|
|
#endif
|