diff --git a/matrix.h b/matrix.h
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..86c8e8f3e3fb477c7abb98a8271ff977c756eec8 100644
--- a/matrix.h
+++ b/matrix.h
@@ -0,0 +1,28 @@
+#ifndef _MY_MATRIX_
+#define _MY_MATRIX_
+#include <cstdint>
+#include <stdbool.h>
+
+typedef enum _error_code {
+    OK, ERR
+} error_code;
+
+struct _matrix
+{
+    int32_t m, n;
+    int32_t ** data;
+} matrix;
+
+error_code matrix_alloc(_matrix *mat, int32_t m, int32_t n);
+error_code matrix_init(_matrix *mat, int32_t m, int32_t n, int32_t val);
+error_code matrix_destroy(_matrix *mat);
+error_code matrix_init_from_array(_matrix *mat, int32_t m , int32_t n, int32_t data[], int32_t s);
+error_code matrix_clone(_matrix *cloned, _matrix mat);
+error_code matrix_transpose(_matrix *transposed, _matrix mat);
+error_code matrix_print(_matrix mat);
+bool matrix_is_equal(_matrix mat1, _matrix mat2);
+error_code matrix_get(int32_t *elem, _matrix mat, int32_t ix, int32_t iy);
+error_code matrix_set(_matrix mat, int32_t ix, int32_t iy, int32_t elem);
+
+
+#endif
\ No newline at end of file