Microsoft.Scripting.Math.BigInteger.sub C# (CSharp) Method

sub() private static method

private static sub ( uint x, int xl, uint y, int yl ) : uint[]
x uint
xl int
y uint
yl int
return uint[]
    private static uint[] sub(uint[] x, int xl, uint[] y, int yl) {
      Debug.Assert(xl >= yl);
      uint[] z = new uint[xl];

      int i;
      bool borrow = false;
      for (i = 0; i < yl; i++) {
        uint xi = x[i];
        uint yi = y[i];
        if (borrow) {
          if (xi == 0) {
            xi = 0xffffffff;
            borrow = true;
          } else {
            xi -= 1;
            borrow = false;
          }
        }
        if (yi > xi) borrow = true;
        z[i] = xi - yi;
      }

      if (borrow) {
        for (; i < xl; i++) {
          uint xi = x[i];
          z[i] = xi - 1;
          if (xi != 0) { i++; break; }
        }
      }
      for (; i < xl; i++) {
        z[i] = x[i];
      }
      return z;  // may have leading zeros
    }