becopyilp: Inline struct size_red_t into struct ilp_env_t.
[libfirm] / ir / kaps / matrix.h
1 /*
2  * This file is part of libFirm.
3  * Copyright (C) 2012 University of Karlsruhe.
4  */
5
6 /**
7  * @file
8  * @brief   PBQP matrix.
9  * @date    02.10.2008
10  * @author  Sebastian Buchwald
11  */
12 #ifndef KAPS_MATRIX_H
13 #define KAPS_MATRIX_H
14
15 #include "matrix_t.h"
16
17 pbqp_matrix_t *pbqp_matrix_alloc(pbqp_t *pbqp, unsigned rows, unsigned cols);
18
19 /* Copy the given matrix. */
20 pbqp_matrix_t *pbqp_matrix_copy(pbqp_t *pbqp, pbqp_matrix_t *m);
21
22 pbqp_matrix_t *pbqp_matrix_copy_and_transpose(pbqp_t *pbqp, pbqp_matrix_t *m);
23
24 void pbqp_matrix_transpose(pbqp_t *pbqp, pbqp_matrix_t *mat);
25
26 /* sum += summand */
27 void pbqp_matrix_add(pbqp_matrix_t *sum, pbqp_matrix_t *summand);
28
29 void pbqp_matrix_set(pbqp_matrix_t *mat, unsigned row, unsigned col, num value);
30
31 num pbqp_matrix_get_col_min(pbqp_matrix_t *matrix, unsigned col_index, vector_t *flags);
32 num pbqp_matrix_get_row_min(pbqp_matrix_t *matrix, unsigned row_index, vector_t *flags);
33
34 unsigned pbqp_matrix_get_col_min_index(pbqp_matrix_t *matrix, unsigned col_index, vector_t *flags);
35 unsigned pbqp_matrix_get_row_min_index(pbqp_matrix_t *matrix, unsigned row_index, vector_t *flags);
36
37 void pbqp_matrix_set_col_value(pbqp_matrix_t *mat, unsigned col, num value);
38 void pbqp_matrix_set_row_value(pbqp_matrix_t *mat, unsigned row, num value);
39
40 void pbqp_matrix_sub_col_value(pbqp_matrix_t *matrix, unsigned col_index,
41                                vector_t *flags, num value);
42 void pbqp_matrix_sub_row_value(pbqp_matrix_t *matrix, unsigned row_index,
43                                vector_t *flags, num value);
44
45 int pbqp_matrix_is_zero(pbqp_matrix_t *mat, vector_t *src_vec, vector_t *tgt_vec);
46
47 void pbqp_matrix_add_to_all_cols(pbqp_matrix_t *mat, vector_t *vec);
48 void pbqp_matrix_add_to_all_rows(pbqp_matrix_t *mat, vector_t *vec);
49
50 #endif /* KAPS_MATRIX_H */