iTextSharp.text.pdf.BidiLine.Reorder C# (CSharp) Метод

Reorder() публичный Метод

public Reorder ( int start, int end ) : void
start int
end int
Результат void
        public void Reorder(int start, int end)
        {
            byte maxLevel = orderLevels[start];
            byte minLevel = maxLevel;
            byte onlyOddLevels = maxLevel;
            byte onlyEvenLevels = maxLevel;
            for (int k = start + 1; k <= end; ++k) {
                byte b = orderLevels[k];
                if (b > maxLevel)
                    maxLevel = b;
                else if (b < minLevel)
                    minLevel = b;
                onlyOddLevels &= b;
                onlyEvenLevels |= b;
            }
            if ((onlyEvenLevels & 1) == 0) // nothing to do
                return;
            if ((onlyOddLevels & 1) == 1) { // single inversion
                Flip(start, end + 1);
                return;
            }
            minLevel |= 1;
            for (; maxLevel >= minLevel; --maxLevel) {
                int pstart = start;
                for (;;) {
                    for (;pstart <= end; ++pstart) {
                        if (orderLevels[pstart] >= maxLevel)
                            break;
                    }
                    if (pstart > end)
                        break;
                    int pend = pstart + 1;
                    for (; pend <= end; ++pend) {
                        if (orderLevels[pend] < maxLevel)
                            break;
                    }
                    Flip(pstart, pend);
                    pstart = pend + 1;
                }
            }
        }