private void decodeTemplate3()

in src/main/java/org/apache/pdfbox/jbig2/segments/GenericRegion.java [597:649]


    private void decodeTemplate3(final int lineNumber, final int width, final int rowStride,
            final int paddedWidth, int byteIndex, int idx) throws IOException
    {
        int context;
        int overriddenContext;

        int line1 = 0;

        if (lineNumber >= 1)
        {
            line1 = regionBitmap.getByteAsInteger(idx);
        }

        context = (line1 >> 1) & 0x70;

        int nextByte;
        for (int x = 0; x < paddedWidth; x = nextByte)
        {
            /* 6.2.5.7 3d */
            byte result = 0;
            nextByte = x + 8;
            final int minorWidth = width - x > 8 ? 8 : width - x;

            if (lineNumber >= 1)
            {
                line1 = (line1 << 8)
                        | (nextByte < width ? regionBitmap.getByteAsInteger(idx + 1) : 0);
            }

            for (int minorX = 0; minorX < minorWidth; minorX++)
            {

                if (override)
                {
                    overriddenContext = overrideAtTemplate3(context, x + minorX, lineNumber, result,
                            minorX);
                    cx.setIndex(overriddenContext);
                }
                else
                {
                    cx.setIndex(context);
                }

                final int bit = arithDecoder.decode(cx);

                result |= bit << (7 - minorX);
                context = ((context & 0x1f7) << 1) | bit | ((line1 >> (8 - minorX)) & 0x010);
            }

            regionBitmap.setByte(byteIndex++, result);
            idx++;
        }
    }