zlaswp function

void zlaswp(
  1. int N,
  2. Matrix<Complex> A_,
  3. int LDA,
  4. int K1,
  5. int K2,
  6. Array<int> IPIV_,
  7. int INCX,
)

Implementation

void zlaswp(
  final int N,
  final Matrix<Complex> A_,
  final int LDA,
  final int K1,
  final int K2,
  final Array<int> IPIV_,
  final int INCX,
) {
  final A = A_.having(ld: LDA);
  final IPIV = IPIV_.having();
  int I, I1, I2, INC, IP, IX, IX0, J, K, N32;
  Complex TEMP;

  // Interchange row I with row IPIV(K1+(I-K1)*abs(INCX)) for each of rows
  // K1 through K2.

  if (INCX > 0) {
    IX0 = K1;
    I1 = K1;
    I2 = K2;
    INC = 1;
  } else if (INCX < 0) {
    IX0 = K1 + (K1 - K2) * INCX;
    I1 = K2;
    I2 = K1;
    INC = -1;
  } else {
    return;
  }

  N32 = (N ~/ 32) * 32;
  if (N32 != 0) {
    for (J = 1; J <= N32; J += 32) {
      IX = IX0;
      for (I = I1; INC < 0 ? I >= I2 : I <= I2; I += INC) {
        IP = IPIV[IX];
        if (IP != I) {
          for (K = J; K <= J + 31; K++) {
            TEMP = A[I][K];
            A[I][K] = A[IP][K];
            A[IP][K] = TEMP;
          }
        }
        IX += INCX;
      }
    }
  }
  if (N32 != N) {
    N32++;
    IX = IX0;
    for (I = I1; INC < 0 ? I >= I2 : I <= I2; I += INC) {
      IP = IPIV[IX];
      if (IP != I) {
        for (K = N32; K <= N; K++) {
          TEMP = A[I][K];
          A[I][K] = A[IP][K];
          A[IP][K] = TEMP;
        }
      }
      IX += INCX;
    }
  }
}