static void RLE_next(RLE *rle) { RLE_check(rle); /* Already finished? */ if (RLE_finished(rle)) return; rle->sequence++; /* Finished now? */ if (RLE_finished(rle)) return; if (rle->zigzag % 2 == 0) { if (rle->curr.col < get_max_col(rle)) { /* Same zigzag */ rle->curr.col++; rle->curr.row = get_row_from_col(rle); } else { /* Next zigzag */ rle->zigzag++; rle->curr.row = get_min_row(rle); rle->curr.col = get_col_from_row(rle); } } else { if (rle->curr.row < get_max_row(rle)) { /* Same zigzag */ rle->curr.row++; rle->curr.col = get_col_from_row(rle); } else { /* Next zigzag */ rle->zigzag++; rle->curr.col = get_min_col(rle); rle->curr.row = get_row_from_col(rle); } } }
void gaussian_elimination() { int i, j, k; double temp; for(k = 0; k < size - 1; ++k) { # pragma omp single swap_rows(k, get_max_row(k)); # pragma omp for schedule(guided) for(i = k + 1; i < size; ++i) { for(j = k; j < size + 1; ++j) { if( j == k ) temp = A[i][k] / A[k][k]; A[i][j] = A[i][j] - temp * A[k][j]; } } } }