1214501Srpaulo/*
2214501Srpaulo * Copyright 2008-2009 Katholieke Universiteit Leuven
3214501Srpaulo *
4214501Srpaulo * Use of this software is governed by the MIT license
5252726Srpaulo *
6252726Srpaulo * Written by Sven Verdoolaege, K.U.Leuven, Departement
7214501Srpaulo * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
8214501Srpaulo */
9214501Srpaulo
10214501Srpaulo#ifndef ISL_VEC_H
11214501Srpaulo#define ISL_VEC_H
12214501Srpaulo
13214501Srpaulo#include <stdio.h>
14214501Srpaulo
15214501Srpaulo#include <isl/ctx.h>
16214501Srpaulo#include <isl/val_type.h>
17214501Srpaulo#include <isl/printer.h>
18214501Srpaulo
19214501Srpaulo#if defined(__cplusplus)
20214501Srpauloextern "C" {
21214501Srpaulo#endif
22214501Srpaulo
23214501Srpaulostruct isl_vec;
24214501Srpaulotypedef struct isl_vec isl_vec;
25214501Srpaulo
26214501Srpaulo__isl_give isl_vec *isl_vec_alloc(isl_ctx *ctx, unsigned size);
27214501Srpaulo__isl_give isl_vec *isl_vec_zero(isl_ctx *ctx, unsigned size);
28214501Srpaulo__isl_give isl_vec *isl_vec_copy(__isl_keep isl_vec *vec);
29214501Srpaulo__isl_null isl_vec *isl_vec_free(__isl_take isl_vec *vec);
30214501Srpaulo
31214501Srpauloisl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec);
32214501Srpaulo
33214501Srpauloisl_size isl_vec_size(__isl_keep isl_vec *vec);
34214501Srpaulo__isl_give isl_val *isl_vec_get_element_val(__isl_keep isl_vec *vec, int pos);
35214501Srpaulo__isl_give isl_vec *isl_vec_set_element_si(__isl_take isl_vec *vec,
36214501Srpaulo	int pos, int v);
37214501Srpaulo__isl_give isl_vec *isl_vec_set_element_val(__isl_take isl_vec *vec,
38214501Srpaulo	int pos, __isl_take isl_val *v);
39214501Srpaulo
40214501Srpauloisl_bool isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2);
41214501Srpauloint isl_vec_cmp_element(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2,
42214501Srpaulo	int pos);
43214501Srpaulo
44214501Srpaulovoid isl_vec_dump(__isl_keep isl_vec *vec);
45214501Srpaulo__isl_give isl_printer *isl_printer_print_vec(__isl_take isl_printer *printer,
46214501Srpaulo	__isl_keep isl_vec *vec);
47214501Srpaulo
48214501Srpaulo__isl_give isl_vec *isl_vec_ceil(__isl_take isl_vec *vec);
49214501Srpaulo__isl_give isl_vec *isl_vec_normalize(__isl_take isl_vec *vec);
50214501Srpaulo__isl_give isl_vec *isl_vec_set_si(__isl_take isl_vec *vec, int v);
51214501Srpaulo__isl_give isl_vec *isl_vec_set_val(__isl_take isl_vec *vec,
52214501Srpaulo	__isl_take isl_val *v);
53214501Srpaulo__isl_give isl_vec *isl_vec_clr(__isl_take isl_vec *vec);
54214501Srpaulo__isl_give isl_vec *isl_vec_neg(__isl_take isl_vec *vec);
55214501Srpaulo__isl_give isl_vec *isl_vec_add(__isl_take isl_vec *vec1,
56214501Srpaulo	__isl_take isl_vec *vec2);
57214501Srpaulo__isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size);
58214501Srpaulo__isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size);
59214501Srpaulo__isl_give isl_vec *isl_vec_concat(__isl_take isl_vec *vec1,
60214501Srpaulo	__isl_take isl_vec *vec2);
61214501Srpaulo
62214501Srpaulo__isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec);
63214501Srpaulo
64214501Srpaulo__isl_give isl_vec *isl_vec_read_from_file(isl_ctx *ctx, FILE *input);
65214501Srpaulo
66214501Srpaulo__isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec,
67214501Srpaulo	unsigned pos, unsigned n);
68214501Srpaulo__isl_give isl_vec *isl_vec_add_els(__isl_take isl_vec *vec, unsigned n);
69214501Srpaulo__isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec,
70214501Srpaulo	unsigned pos, unsigned n);
71214501Srpaulo__isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec,
72214501Srpaulo	unsigned pos, unsigned n);
73214501Srpaulo__isl_give isl_vec *isl_vec_move_els(__isl_take isl_vec *vec,
74214501Srpaulo	unsigned dst_col, unsigned src_col, unsigned n);
75214501Srpaulo
76214501Srpaulo#if defined(__cplusplus)
77214501Srpaulo}
78214501Srpaulo#endif
79214501Srpaulo
80214501Srpaulo#endif
81214501Srpaulo