From 51ab7843b70d5833807856fb2228e60a5208e91f Mon Sep 17 00:00:00 2001
From: "dario.genga" <dario.genga@etu.hesge.ch>
Date: Tue, 23 Nov 2021 00:12:23 +0100
Subject: [PATCH] Add matrix transpose

---
 main.c   | 11 ++++++++++-
 matrix.c | 16 ++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/main.c b/main.c
index e83ba65..a86789a 100644
--- a/main.c
+++ b/main.c
@@ -11,24 +11,33 @@
 #include "matrix.h"
 
 int main() {
-    matrix mat, cloned;
+    matrix mat, cloned, transposed;
     int32_t m = 3;
     int32_t n = 4;
     int32_t s = m * n;
     int32_t val = 0;
     int32_t data[12] = { 2, 1, -1, -2, 3, 1, 1, 3, 1, 4, -1, -1 };
+    // Init
     matrix_init(&mat, m, n, val);
     printf("Empty matrix %dx%d\n", m, n);
     matrix_print(mat);
+    // Init from array
     matrix_init_from_array(&mat, m, n, data, s);
     printf("Matrix %dx%d from array\n", m, n);
     matrix_print(mat);
+    // Clone
     matrix_clone(&cloned, mat);
     printf("Cloned matrix :\n");
     matrix_print(cloned);
+    // Transpose
+    matrix_transpose(&transposed, mat);
+    printf("Transposed matrix :\n");
+    matrix_print(transposed);
     // Free the memory
     matrix_destroy(&mat);
     matrix_destroy(&cloned);
+    matrix_destroy(&transposed);
+
     
     return EXIT_SUCCESS;
 }
diff --git a/matrix.c b/matrix.c
index af26f76..fb71f56 100644
--- a/matrix.c
+++ b/matrix.c
@@ -106,3 +106,19 @@ error_code matrix_destroy(matrix *mat) {
 
     return ok;
 }
+
+error_code matrix_transpose(matrix *transposed, const matrix mat) {
+    error_code code = matrix_alloc(transposed, mat.n, mat.m);
+    if (code == err) {
+        return err;
+    }
+
+    for (int i = 0; i < mat.m; i++) {
+        for (int k = 0; k < mat.n; k++) {
+            transposed->data[k][i] = mat.data[i][k];
+        }
+    }
+
+    return ok;
+}
+
-- 
GitLab