2 * Copyright 2008-2009 Katholieke Universiteit Leuven
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege, K.U.Leuven, Departement
7 * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
20 #if defined(__cplusplus)
25 typedef struct isl_mat isl_mat
;
27 isl_ctx
*isl_mat_get_ctx(__isl_keep isl_mat
*mat
);
29 __isl_give isl_mat
*isl_mat_alloc(isl_ctx
*ctx
,
30 unsigned n_row
, unsigned n_col
);
31 struct isl_mat
*isl_mat_dup(struct isl_mat
*mat
);
32 struct isl_mat
*isl_mat_extend(struct isl_mat
*mat
,
33 unsigned n_row
, unsigned n_col
);
34 struct isl_mat
*isl_mat_identity(struct isl_ctx
*ctx
, unsigned n_row
);
35 __isl_give isl_mat
*isl_mat_copy(__isl_keep isl_mat
*mat
);
36 struct isl_mat
*isl_mat_cow(struct isl_mat
*mat
);
37 void *isl_mat_free(__isl_take isl_mat
*mat
);
39 int isl_mat_rows(__isl_keep isl_mat
*mat
);
40 int isl_mat_cols(__isl_keep isl_mat
*mat
);
41 int isl_mat_get_element(__isl_keep isl_mat
*mat
, int row
, int col
, isl_int
*v
);
42 __isl_give isl_val
*isl_mat_get_element_val(__isl_keep isl_mat
*mat
,
44 __isl_give isl_mat
*isl_mat_set_element(__isl_take isl_mat
*mat
,
45 int row
, int col
, isl_int v
);
46 __isl_give isl_mat
*isl_mat_set_element_si(__isl_take isl_mat
*mat
,
47 int row
, int col
, int v
);
48 __isl_give isl_mat
*isl_mat_set_element_val(__isl_take isl_mat
*mat
,
49 int row
, int col
, __isl_take isl_val
*v
);
51 struct isl_mat
*isl_mat_swap_cols(struct isl_mat
*mat
, unsigned i
, unsigned j
);
52 struct isl_mat
*isl_mat_swap_rows(struct isl_mat
*mat
, unsigned i
, unsigned j
);
54 struct isl_vec
*isl_mat_vec_product(struct isl_mat
*mat
, struct isl_vec
*vec
);
55 struct isl_vec
*isl_vec_mat_product(struct isl_vec
*vec
, struct isl_mat
*mat
);
56 __isl_give isl_vec
*isl_mat_vec_inverse_product(__isl_take isl_mat
*mat
,
57 __isl_take isl_vec
*vec
);
58 struct isl_mat
*isl_mat_aff_direct_sum(struct isl_mat
*left
,
59 struct isl_mat
*right
);
60 __isl_give isl_mat
*isl_mat_diagonal(__isl_take isl_mat
*mat1
,
61 __isl_take isl_mat
*mat2
);
62 struct isl_mat
*isl_mat_left_hermite(struct isl_mat
*M
,
63 int neg
, struct isl_mat
**U
, struct isl_mat
**Q
);
64 struct isl_mat
*isl_mat_lin_to_aff(struct isl_mat
*mat
);
65 struct isl_mat
*isl_mat_inverse_product(struct isl_mat
*left
,
66 struct isl_mat
*right
);
67 __isl_give isl_mat
*isl_mat_product(__isl_take isl_mat
*left
,
68 __isl_take isl_mat
*right
);
69 struct isl_mat
*isl_mat_transpose(struct isl_mat
*mat
);
70 __isl_give isl_mat
*isl_mat_right_inverse(__isl_take isl_mat
*mat
);
71 __isl_give isl_mat
*isl_mat_right_kernel(__isl_take isl_mat
*mat
);
73 __isl_give isl_mat
*isl_mat_scale_down_row(__isl_take isl_mat
*mat
, int row
,
76 __isl_give isl_mat
*isl_mat_normalize(__isl_take isl_mat
*mat
);
77 __isl_give isl_mat
*isl_mat_normalize_row(__isl_take isl_mat
*mat
, int row
);
79 struct isl_mat
*isl_mat_drop_cols(struct isl_mat
*mat
,
80 unsigned col
, unsigned n
);
81 struct isl_mat
*isl_mat_drop_rows(struct isl_mat
*mat
,
82 unsigned row
, unsigned n
);
83 __isl_give isl_mat
*isl_mat_insert_cols(__isl_take isl_mat
*mat
,
84 unsigned col
, unsigned n
);
85 __isl_give isl_mat
*isl_mat_insert_rows(__isl_take isl_mat
*mat
,
86 unsigned row
, unsigned n
);
87 __isl_give isl_mat
*isl_mat_move_cols(__isl_take isl_mat
*mat
,
88 unsigned dst_col
, unsigned src_col
, unsigned n
);
89 __isl_give isl_mat
*isl_mat_add_rows(__isl_take isl_mat
*mat
, unsigned n
);
90 __isl_give isl_mat
*isl_mat_insert_zero_cols(__isl_take isl_mat
*mat
,
91 unsigned first
, unsigned n
);
92 __isl_give isl_mat
*isl_mat_add_zero_cols(__isl_take isl_mat
*mat
, unsigned n
);
93 __isl_give isl_mat
*isl_mat_insert_zero_rows(__isl_take isl_mat
*mat
,
94 unsigned row
, unsigned n
);
95 __isl_give isl_mat
*isl_mat_add_zero_rows(__isl_take isl_mat
*mat
, unsigned n
);
97 void isl_mat_col_add(__isl_keep isl_mat
*mat
, int dst_col
, int src_col
);
98 void isl_mat_col_mul(struct isl_mat
*mat
, int dst_col
, isl_int f
, int src_col
);
99 void isl_mat_col_submul(struct isl_mat
*mat
,
100 int dst_col
, isl_int f
, int src_col
);
102 struct isl_mat
*isl_mat_unimodular_complete(struct isl_mat
*M
, int row
);
104 __isl_give isl_mat
*isl_mat_from_row_vec(__isl_take isl_vec
*vec
);
105 __isl_give isl_mat
*isl_mat_concat(__isl_take isl_mat
*top
,
106 __isl_take isl_mat
*bot
);
107 __isl_give isl_mat
*isl_mat_vec_concat(__isl_take isl_mat
*top
,
108 __isl_take isl_vec
*bot
);
110 int isl_mat_is_equal(__isl_keep isl_mat
*mat1
, __isl_keep isl_mat
*mat2
);
112 int isl_mat_initial_non_zero_cols(__isl_keep isl_mat
*mat
);
114 void isl_mat_print_internal(__isl_keep isl_mat
*mat
, FILE *out
, int indent
);
115 void isl_mat_dump(__isl_keep isl_mat
*mat
);
117 #if defined(__cplusplus)