Home | History | Annotate | Line # | Download | only in dist
      1 #ifndef ISL_MAT_PRIVATE_H
      2 #define ISL_MAT_PRIVATE_H
      3 
      4 #include <isl/mat.h>
      5 #include <isl_blk.h>
      6 
      7 struct isl_mat {
      8 	int ref;
      9 
     10 	struct isl_ctx *ctx;
     11 
     12 #define ISL_MAT_BORROWED		(1 << 0)
     13 	unsigned flags;
     14 
     15 	unsigned n_row;
     16 	unsigned n_col;
     17 
     18 	isl_int **row;
     19 
     20 	/* actual size of the rows in memory; n_col <= max_col */
     21 	unsigned max_col;
     22 
     23 	struct isl_blk block;
     24 };
     25 
     26 uint32_t isl_mat_get_hash(__isl_keep isl_mat *mat);
     27 
     28 __isl_give isl_mat *isl_mat_zero(isl_ctx *ctx, unsigned n_row, unsigned n_col);
     29 __isl_give isl_mat *isl_mat_dup(__isl_keep isl_mat *mat);
     30 __isl_give isl_mat *isl_mat_cow(__isl_take isl_mat *mat);
     31 __isl_give isl_mat *isl_mat_sub_alloc(__isl_keep isl_mat *mat,
     32 	unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col);
     33 __isl_give isl_mat *isl_mat_sub_alloc6(isl_ctx *ctx, isl_int **row,
     34 	unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col);
     35 void isl_mat_sub_copy(struct isl_ctx *ctx, isl_int **dst, isl_int **src,
     36 	unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col);
     37 void isl_mat_sub_neg(struct isl_ctx *ctx, isl_int **dst, isl_int **src,
     38 	unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col);
     39 isl_stat isl_mat_sub_transform(isl_int **row, unsigned n_row,
     40 	unsigned first_col, __isl_take isl_mat *mat);
     41 __isl_give isl_mat *isl_mat_diag(isl_ctx *ctx, unsigned n_row, isl_int d);
     42 
     43 __isl_give isl_mat *isl_mat_reverse_gauss(__isl_take isl_mat *mat);
     44 
     45 __isl_give isl_mat *isl_mat_scale(__isl_take isl_mat *mat, isl_int m);
     46 __isl_give isl_mat *isl_mat_scale_down_row(__isl_take isl_mat *mat, int row,
     47 	isl_int m);
     48 
     49 __isl_give isl_vec *isl_mat_get_row(__isl_keep isl_mat *mat, unsigned row);
     50 
     51 __isl_give isl_mat *isl_mat_lexnonneg_rows(__isl_take isl_mat *mat);
     52 
     53 isl_bool isl_mat_is_scaled_identity(__isl_keep isl_mat *mat);
     54 
     55 isl_stat isl_mat_row_gcd(__isl_keep isl_mat *mat, int row, isl_int *gcd);
     56 
     57 void isl_mat_col_mul(__isl_keep isl_mat *mat, int dst_col, isl_int f,
     58 	int src_col);
     59 void isl_mat_col_submul(__isl_keep isl_mat *mat,
     60 			int dst_col, isl_int f, int src_col);
     61 __isl_give isl_mat *isl_mat_col_addmul(__isl_take isl_mat *mat, int dst_col,
     62 	isl_int f, int src_col);
     63 __isl_give isl_mat *isl_mat_col_neg(__isl_take isl_mat *mat, int col);
     64 __isl_give isl_mat *isl_mat_row_neg(__isl_take isl_mat *mat, int row);
     65 
     66 int isl_mat_get_element(__isl_keep isl_mat *mat, int row, int col, isl_int *v);
     67 __isl_give isl_mat *isl_mat_set_element(__isl_take isl_mat *mat,
     68 	int row, int col, isl_int v);
     69 
     70 #endif
     71