Transpile Java speedup
@@ -852,10 +852,24 @@ namespace Org.Brotli.Dec
case Org.Brotli.Dec.RunningState.CopyLoop:
{
// fall through
+ int src = (state.pos - state.distance) & ringBufferMask;
+ int dst = state.pos;
+ int copyLength = state.copyLength - state.j;
+ if ((src + copyLength < ringBufferMask) && (dst + copyLength < ringBufferMask))
+ {
+ for (int k = 0; k < copyLength; ++k)
+ {
+ ringBuffer[dst++] = ringBuffer[src++];
+ }
+ state.j += copyLength;
+ state.metaBlockLength -= copyLength;
+ state.pos += copyLength;
+ }
+ else
+ {
for (; state.j < state.copyLength; )
{
ringBuffer[state.pos] = ringBuffer[(state.pos - state.distance) & ringBufferMask];
- // TODO: condense
state.metaBlockLength--;
state.j++;
if (state.pos++ == ringBufferMask)
@@ -867,6 +881,7 @@ namespace Org.Brotli.Dec
break;
}
}
+ }
if (state.runningState == Org.Brotli.Dec.RunningState.CopyLoop)
{
state.runningState = Org.Brotli.Dec.RunningState.MainLoop;
