unsigned char()

in src/transport/fec_schemes/xqc_galois_calculation.c [147:193]


    unsigned char (*output)[2 * XQC_RSM_COL])
{
    int row_i, col_i, max_row, i, tmp, inv, row_above;
    unsigned char ratio = 0;
    for (row_i = 0; row_i < rows; row_i++) {
        max_row = row_i;
        for (i = row_i + 1; i < rows; i++) {
            if (output[i][row_i] > output[max_row][row_i]) {
                max_row = i;
            }
        }

        for (col_i = row_i; col_i < cols; col_i++) {
            tmp = output[max_row][col_i];
            output[max_row][col_i] = output[row_i][col_i];
            output[row_i][col_i] = tmp;
        }

        if (output[row_i][row_i] == 0) {
            return -XQC_EFEC_SCHEME_ERROR;
        }

        inv = xqc_galois_inversion(output[row_i][row_i]);
        for (col_i = row_i; col_i < cols; col_i++) {
            output[row_i][col_i] = xqc_galois_multiply(output[row_i][col_i], inv);
        }

        for (i = row_i + 1; i < rows; i++) {
            tmp = output[i][row_i];
            for (col_i = row_i; col_i < cols; col_i++) {
                output[i][col_i] ^= xqc_galois_multiply(tmp, output[row_i][col_i]);
            }
        }
    }

    for (row_i = 0; row_i < rows; row_i++) {
        for (row_above = 0; row_above < row_i; row_above++) {
            if (output[row_above][row_i] != 0) {
                ratio = output[row_above][row_i];
                for (col_i = 0; col_i < cols; col_i++) {
                    output[row_above][col_i] ^= xqc_galois_multiply(ratio, output[row_i][col_i]);
                }
            }
        }
    }
    return XQC_OK;
}