summaryrefslogtreecommitdiff
path: root/matrix.c
diff options
context:
space:
mode:
authorJasper2025-09-01 20:10:12 +0200
committerJasper2025-09-01 20:10:12 +0200
commitbc4215edfd34590c8078b3bb459005807d36c5cf (patch)
treeb94cf727dbdb86e5ef0a03d20dbf1cc4ea57c0ee /matrix.c
parentb780a32d53e718328ab496c37cbb2710254da6d2 (diff)
Merge row-swap and col-swap
Diffstat (limited to 'matrix.c')
-rw-r--r--matrix.c64
1 files changed, 30 insertions, 34 deletions
diff --git a/matrix.c b/matrix.c
index c04b91b..a784308 100644
--- a/matrix.c
+++ b/matrix.c
@@ -121,53 +121,49 @@ Matrix *matrix_copy (const Matrix *mat)
return tmp;
}
-Matrix *matrix_swap_rows(const Matrix *mat, size_t i, size_t j)
+Matrix *matrix_swap(const Matrix *mat, MatrixSwapType t, size_t i, size_t j)
{
Matrix *tmp = matrix_copy(mat);
+ size_t lim = (t == MATRIX_SWAP_ROWS ? mat->n : mat->m);
- for (size_t k = 0; k < mat->n; ++k)
+ for (size_t k = 0; k < lim; ++k)
{
- matrix_at(tmp, i, k) = matrix_at(mat, j, k);
- matrix_at(tmp, j, k) = matrix_at(mat, i, k);
+ switch (t)
+ {
+ case MATRIX_SWAP_ROWS:
+ matrix_at(tmp, i, k) = matrix_at(mat, j, k);
+ matrix_at(tmp, j, k) = matrix_at(mat, i, k);
+ break;
+ case MATRIX_SWAP_COLS:
+ matrix_at(tmp, k, i) = matrix_at(mat, k, j);
+ matrix_at(tmp, k, j) = matrix_at(mat, k, i);
+ break;
+ }
}
return tmp;
}
-void matrix_swap_rows1(Matrix *mat, size_t i, size_t j)
+void matrix_swap1(Matrix *mat, MatrixSwapType t, size_t i, size_t j)
{
double tmp;
+ size_t lim = (t == MATRIX_SWAP_ROWS ? mat->n : mat->m);
- for (size_t k = 0; k < mat->n; ++k)
- {
- tmp = matrix_at(mat, i, k);
- matrix_at(mat, i, k) = matrix_at(mat, j, k);
- matrix_at(mat, j, k) = tmp;
- }
-}
-
-Matrix *matrix_swap_cols(const Matrix *mat, size_t i, size_t j)
-{
- Matrix *tmp = matrix_copy(mat);
-
- for (size_t k = 0; k < mat->m; ++k)
+ for (size_t k = 0; k < lim; ++k)
{
- matrix_at(tmp, k, i) = matrix_at(mat, k, j);
- matrix_at(tmp, k, j) = matrix_at(mat, k, i);
- }
-
- return tmp;
-}
-
-void matrix_swap_cols1(const Matrix *mat, size_t i, size_t j)
-{
- double x;
-
- for (size_t k = 0; k < mat->m; ++k)
- {
- x = matrix_at(mat, k, i);
- matrix_at(mat, k, i) = matrix_at(mat, k, j);
- matrix_at(mat, k, j) = x;
+ switch (t)
+ {
+ case MATRIX_SWAP_ROWS:
+ tmp = matrix_at(mat, i, k);
+ matrix_at(mat, i, k) = matrix_at(mat, j, k);
+ matrix_at(mat, j, k) = tmp;
+ break;
+ case MATRIX_SWAP_COLS:
+ tmp = matrix_at(mat, k, i);
+ matrix_at(mat, k, i) = matrix_at(mat, k, j);
+ matrix_at(mat, k, j) = tmp;
+ break;
+ }
}
}