12 #if defined(__cplusplus)
19 #define ISL_MAT_BORROWED (1 << 0)
30 struct isl_mat
*isl_mat_alloc(struct isl_ctx
*ctx
,
31 unsigned n_row
, unsigned n_col
);
32 struct isl_mat
*isl_mat_extend(struct isl_ctx
*ctx
, 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 struct isl_mat
*isl_mat_copy(struct isl_ctx
*ctx
, struct isl_mat
*mat
);
36 struct isl_mat
*isl_mat_cow(struct isl_ctx
*ctx
, struct isl_mat
*mat
);
37 void isl_mat_free(struct isl_ctx
*ctx
, struct isl_mat
*mat
);
39 struct isl_mat
*isl_mat_sub_alloc(struct isl_ctx
*ctx
, isl_int
**row
,
40 unsigned first_row
, unsigned n_row
, unsigned first_col
, unsigned n_col
);
41 void isl_mat_sub_copy(struct isl_ctx
*ctx
, isl_int
**dst
, isl_int
**src
,
42 unsigned n_row
, unsigned dst_col
, unsigned src_col
, unsigned n_col
);
43 void isl_mat_sub_neg(struct isl_ctx
*ctx
, isl_int
**dst
, isl_int
**src
,
44 unsigned n_row
, unsigned dst_col
, unsigned src_col
, unsigned n_col
);
46 struct isl_mat
*isl_mat_swap_cols(struct isl_ctx
*ctx
,
47 struct isl_mat
*mat
, unsigned i
, unsigned j
);
48 struct isl_mat
*isl_mat_swap_rows(struct isl_ctx
*ctx
,
49 struct isl_mat
*mat
, unsigned i
, unsigned j
);
51 struct isl_vec
*isl_mat_vec_product(struct isl_ctx
*ctx
,
52 struct isl_mat
*mat
, struct isl_vec
*vec
);
53 struct isl_mat
*isl_mat_aff_direct_sum(struct isl_ctx
*ctx
,
54 struct isl_mat
*left
, struct isl_mat
*right
);
55 struct isl_mat
*isl_mat_left_hermite(struct isl_ctx
*ctx
,
56 struct isl_mat
*M
, int neg
, struct isl_mat
**U
, struct isl_mat
**Q
);
57 struct isl_mat
*isl_mat_lin_to_aff(struct isl_ctx
*ctx
, struct isl_mat
*mat
);
58 struct isl_mat
*isl_mat_inverse_product(struct isl_ctx
*ctx
,
59 struct isl_mat
*left
, struct isl_mat
*right
);
60 struct isl_mat
*isl_mat_product(struct isl_ctx
*ctx
,
61 struct isl_mat
*left
, struct isl_mat
*right
);
62 struct isl_mat
*isl_mat_transpose(struct isl_ctx
*ctx
, struct isl_mat
*mat
);
63 struct isl_mat
*isl_mat_right_inverse(struct isl_ctx
*ctx
,
65 struct isl_mat
*isl_mat_right_kernel(struct isl_ctx
*ctx
, struct isl_mat
*mat
);
67 struct isl_mat
*isl_mat_drop_cols(struct isl_ctx
*ctx
, struct isl_mat
*mat
,
68 unsigned col
, unsigned n
);
69 struct isl_mat
*isl_mat_drop_rows(struct isl_ctx
*ctx
, struct isl_mat
*mat
,
70 unsigned row
, unsigned n
);
72 void isl_mat_col_mul(struct isl_mat
*mat
, int dst_col
, isl_int f
, int src_col
);
73 void isl_mat_col_submul(struct isl_mat
*mat
,
74 int dst_col
, isl_int f
, int src_col
);
76 struct isl_basic_set
*isl_basic_set_preimage(struct isl_basic_set
*bset
,
78 struct isl_set
*isl_set_preimage(struct isl_set
*set
, struct isl_mat
*mat
);
80 void isl_mat_dump(struct isl_ctx
*ctx
, struct isl_mat
*mat
,
81 FILE *out
, int indent
);
83 #if defined(__cplusplus)