System.Xml.Xsl.XPathConvert.BigInteger.ShiftLeft C# (CSharp) Method

ShiftLeft() public method

public ShiftLeft ( int cbit ) : void
cbit int
return void
            public void ShiftLeft(int cbit) {
                AssertValid();
                Debug.Assert(cbit >= 0);

                int idx, cu;
                uint uExtra;

                if (0 == cbit || 0 == length) {
                    return;
                }

                cu = cbit >> 5;
                cbit &= 0x001F;

                if (cbit > 0) {
                    idx = length - 1;
                    uExtra = digits[idx] >> (32 - cbit);

                    for ( ; ; idx--) {
                        digits[idx] <<= cbit;
                        if (0 == idx) {
                            break;
                        }
                        digits[idx] |= digits[idx - 1] >> (32 - cbit);
                    }
                } else {
                    uExtra = 0;
                }

                if (cu > 0 || 0 != uExtra) {
                    // Make sure there's enough room.
                    idx = length + (0 != uExtra ? 1 : 0) + cu;
                    Ensure(idx);

                    if (cu > 0) {
                        for (int i = length; 0 != i--; ) {
                            digits[cu + i] = digits[i];
                        }
                        for (int i = 0; i < cu; i++) {
                            digits[i] = 0;
                        }
                        length += cu;
                    }

                    // Throw on the extra one.
                    if (0 != uExtra) {
                        digits[length++] = uExtra;
                    }
                }
                AssertValid();
            }