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) 21extern "C" { 22#endif 23 24struct 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}; 34typedef 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); 38struct isl_vec *isl_vec_cow(struct isl_vec *vec); 39void *isl_vec_free(__isl_take isl_vec *vec); 40 41isl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec); 42 43int isl_vec_size(__isl_keep isl_vec *vec); 44int 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 50int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2); 51 52void 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 56void isl_vec_lcm(struct isl_vec *vec, isl_int *lcm); 57struct isl_vec *isl_vec_ceil(struct isl_vec *vec); 58struct 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