1 /* 2 * Copyright 2008-2009 Katholieke Universiteit Leuven 3 * 4 * Use of this software is governed by the MIT license 5 * 6 * Written by Sven Verdoolaege, K.U.Leuven, Departement 7 * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium 8 */ 9 10 #ifndef ISL_MAT_H 11 #define ISL_MAT_H 12 13 #include <stdio.h> 14 15 #include <isl/ctx.h> 16 #include <isl/vec.h> 17 #include <isl/val_type.h> 18 19 #if defined(__cplusplus) 20 extern "C" { 21 #endif 22 23 struct isl_mat; 24 typedef struct isl_mat isl_mat; 25 26 isl_ctx *isl_mat_get_ctx(__isl_keep isl_mat *mat); 27 28 __isl_give isl_mat *isl_mat_alloc(isl_ctx *ctx, 29 unsigned n_row, unsigned n_col); 30 __isl_give isl_mat *isl_mat_extend(__isl_take isl_mat *mat, 31 unsigned n_row, unsigned n_col); 32 __isl_give isl_mat *isl_mat_identity(isl_ctx *ctx, unsigned n_row); 33 __isl_give isl_mat *isl_mat_copy(__isl_keep isl_mat *mat); 34 __isl_null isl_mat *isl_mat_free(__isl_take isl_mat *mat); 35 36 isl_size isl_mat_rows(__isl_keep isl_mat *mat); 37 isl_size isl_mat_cols(__isl_keep isl_mat *mat); 38 __isl_give isl_val *isl_mat_get_element_val(__isl_keep isl_mat *mat, 39 int row, int col); 40 __isl_give isl_mat *isl_mat_set_element_si(__isl_take isl_mat *mat, 41 int row, int col, int v); 42 __isl_give isl_mat *isl_mat_set_element_val(__isl_take isl_mat *mat, 43 int row, int col, __isl_take isl_val *v); 44 45 __isl_give isl_mat *isl_mat_swap_cols(__isl_take isl_mat *mat, 46 unsigned i, unsigned j); 47 __isl_give isl_mat *isl_mat_swap_rows(__isl_take isl_mat *mat, 48 unsigned i, unsigned j); 49 50 __isl_give isl_vec *isl_mat_vec_product(__isl_take isl_mat *mat, 51 __isl_take isl_vec *vec); 52 __isl_give isl_vec *isl_vec_mat_product(__isl_take isl_vec *vec, 53 __isl_take isl_mat *mat); 54 __isl_give isl_vec *isl_mat_vec_inverse_product(__isl_take isl_mat *mat, 55 __isl_take isl_vec *vec); 56 __isl_give isl_mat *isl_mat_aff_direct_sum(__isl_take isl_mat *left, 57 __isl_take isl_mat *right); 58 __isl_give isl_mat *isl_mat_diagonal(__isl_take isl_mat *mat1, 59 __isl_take isl_mat *mat2); 60 __isl_give isl_mat *isl_mat_left_hermite(__isl_take isl_mat *M, int neg, 61 __isl_give isl_mat **U, __isl_give isl_mat **Q); 62 __isl_give isl_mat *isl_mat_lin_to_aff(__isl_take isl_mat *mat); 63 __isl_give isl_mat *isl_mat_inverse_product(__isl_take isl_mat *left, 64 __isl_take isl_mat *right); 65 __isl_give isl_mat *isl_mat_product(__isl_take isl_mat *left, 66 __isl_take isl_mat *right); 67 __isl_give isl_mat *isl_mat_transpose(__isl_take isl_mat *mat); 68 __isl_give isl_mat *isl_mat_right_inverse(__isl_take isl_mat *mat); 69 __isl_give isl_mat *isl_mat_right_kernel(__isl_take isl_mat *mat); 70 71 __isl_give isl_mat *isl_mat_normalize(__isl_take isl_mat *mat); 72 __isl_give isl_mat *isl_mat_normalize_row(__isl_take isl_mat *mat, int row); 73 74 __isl_give isl_mat *isl_mat_drop_cols(__isl_take isl_mat *mat, 75 unsigned col, unsigned n); 76 __isl_give isl_mat *isl_mat_drop_rows(__isl_take isl_mat *mat, 77 unsigned row, unsigned n); 78 __isl_give isl_mat *isl_mat_insert_cols(__isl_take isl_mat *mat, 79 unsigned col, unsigned n); 80 __isl_give isl_mat *isl_mat_insert_rows(__isl_take isl_mat *mat, 81 unsigned row, unsigned n); 82 __isl_give isl_mat *isl_mat_move_cols(__isl_take isl_mat *mat, 83 unsigned dst_col, unsigned src_col, unsigned n); 84 __isl_give isl_mat *isl_mat_add_rows(__isl_take isl_mat *mat, unsigned n); 85 __isl_give isl_mat *isl_mat_insert_zero_cols(__isl_take isl_mat *mat, 86 unsigned first, unsigned n); 87 __isl_give isl_mat *isl_mat_add_zero_cols(__isl_take isl_mat *mat, unsigned n); 88 __isl_give isl_mat *isl_mat_insert_zero_rows(__isl_take isl_mat *mat, 89 unsigned row, unsigned n); 90 __isl_give isl_mat *isl_mat_add_zero_rows(__isl_take isl_mat *mat, unsigned n); 91 92 void isl_mat_col_add(__isl_keep isl_mat *mat, int dst_col, int src_col); 93 94 __isl_give isl_mat *isl_mat_unimodular_complete(__isl_take isl_mat *M, int row); 95 __isl_give isl_mat *isl_mat_row_basis(__isl_take isl_mat *mat); 96 __isl_give isl_mat *isl_mat_row_basis_extension( 97 __isl_take isl_mat *mat1, __isl_take isl_mat *mat2); 98 99 __isl_give isl_mat *isl_mat_from_row_vec(__isl_take isl_vec *vec); 100 __isl_give isl_mat *isl_mat_concat(__isl_take isl_mat *top, 101 __isl_take isl_mat *bot); 102 __isl_give isl_mat *isl_mat_vec_concat(__isl_take isl_mat *top, 103 __isl_take isl_vec *bot); 104 105 isl_bool isl_mat_is_equal(__isl_keep isl_mat *mat1, __isl_keep isl_mat *mat2); 106 isl_bool isl_mat_has_linearly_independent_rows(__isl_keep isl_mat *mat1, 107 __isl_keep isl_mat *mat2); 108 109 isl_size isl_mat_rank(__isl_keep isl_mat *mat); 110 int isl_mat_initial_non_zero_cols(__isl_keep isl_mat *mat); 111 112 void isl_mat_print_internal(__isl_keep isl_mat *mat, FILE *out, int indent); 113 void isl_mat_dump(__isl_keep isl_mat *mat); 114 115 #if defined(__cplusplus) 116 } 117 #endif 118 119 #endif 120