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_VEC_H 11 #define ISL_VEC_H 12 13 #include <stdio.h> 14 15 #include <isl/int.h> 16 #include <isl/ctx.h> 17 #include <isl/blk.h> 18 #include <isl/printer.h> 19 20 #if defined(__cplusplus) 21 extern "C" { 22 #endif 23 24 struct isl_vec { 25 int ref; 26 27 struct isl_ctx *ctx; 28 29 unsigned size; 30 isl_int *el; 31 32 struct isl_blk block; 33 }; 34 typedef struct isl_vec isl_vec; 35 36 __isl_give isl_vec *isl_vec_alloc(isl_ctx *ctx, unsigned size); 37 __isl_give isl_vec *isl_vec_copy(__isl_keep isl_vec *vec); 38 struct isl_vec *isl_vec_cow(struct isl_vec *vec); 39 void *isl_vec_free(__isl_take isl_vec *vec); 40 41 isl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec); 42 43 int isl_vec_size(__isl_keep isl_vec *vec); 44 int isl_vec_get_element(__isl_keep isl_vec *vec, int pos, isl_int *v); 45 __isl_give isl_vec *isl_vec_set_element(__isl_take isl_vec *vec, 46 int pos, isl_int v); 47 __isl_give isl_vec *isl_vec_set_element_si(__isl_take isl_vec *vec, 48 int pos, int v); 49 50 int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2); 51 52 void isl_vec_dump(__isl_keep isl_vec *vec); 53 __isl_give isl_printer *isl_printer_print_vec(__isl_take isl_printer *printer, 54 __isl_keep isl_vec *vec); 55 56 void isl_vec_lcm(struct isl_vec *vec, isl_int *lcm); 57 struct isl_vec *isl_vec_ceil(struct isl_vec *vec); 58 struct isl_vec *isl_vec_normalize(struct isl_vec *vec); 59 __isl_give isl_vec *isl_vec_set(__isl_take isl_vec *vec, isl_int v); 60 __isl_give isl_vec *isl_vec_set_si(__isl_take isl_vec *vec, int v); 61 __isl_give isl_vec *isl_vec_clr(__isl_take isl_vec *vec); 62 __isl_give isl_vec *isl_vec_neg(__isl_take isl_vec *vec); 63 __isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m); 64 __isl_give isl_vec *isl_vec_fdiv_r(__isl_take isl_vec *vec, isl_int m); 65 __isl_give isl_vec *isl_vec_add(__isl_take isl_vec *vec1, 66 __isl_take isl_vec *vec2); 67 __isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size); 68 __isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size); 69 __isl_give isl_vec *isl_vec_concat(__isl_take isl_vec *vec1, 70 __isl_take isl_vec *vec2); 71 72 __isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec); 73 74 __isl_give isl_vec *isl_vec_read_from_file(isl_ctx *ctx, FILE *input); 75 76 __isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec, 77 unsigned pos, unsigned n); 78 __isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec, 79 unsigned pos, unsigned n); 80 __isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec, 81 unsigned pos, unsigned n); 82 83 #if defined(__cplusplus) 84 } 85 #endif 86 87 #endif 88