1 | /* |
2 | * Copyright 2010 INRIA Saclay |
3 | * |
4 | * Use of this software is governed by the MIT license |
5 | * |
6 | * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, |
7 | * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, |
8 | * 91893 Orsay, France |
9 | */ |
10 | |
11 | #ifndef ISL_MORHP_H |
12 | #define ISL_MORHP_H |
13 | |
14 | #include <stdio.h> |
15 | #include <isl/id_type.h> |
16 | #include <isl/space.h> |
17 | #include <isl/mat.h> |
18 | #include <isl/set.h> |
19 | |
20 | #if defined(__cplusplus) |
21 | extern "C" { |
22 | #endif |
23 | |
24 | /* An isl_morph is a "morphism" on (basic) sets. |
25 | * "map" is an affine mapping from "dom" to "ran" |
26 | * and "inv" is the inverse mapping. |
27 | */ |
28 | struct isl_morph { |
29 | int ref; |
30 | |
31 | isl_basic_set *dom; |
32 | isl_basic_set *ran; |
33 | |
34 | isl_mat *map; |
35 | isl_mat *inv; |
36 | }; |
37 | typedef struct isl_morph isl_morph; |
38 | |
39 | isl_ctx *isl_morph_get_ctx(__isl_keep isl_morph *morph); |
40 | |
41 | __isl_give isl_morph *isl_morph_alloc( |
42 | __isl_take isl_basic_set *dom, __isl_take isl_basic_set *ran, |
43 | __isl_take isl_mat *map, __isl_take isl_mat *inv); |
44 | __isl_give isl_morph *isl_morph_copy(__isl_keep isl_morph *morph); |
45 | __isl_give isl_morph *isl_morph_identity(__isl_keep isl_basic_set *bset); |
46 | __isl_null isl_morph *isl_morph_free(__isl_take isl_morph *morph); |
47 | |
48 | isl_stat isl_morph_check_applies(__isl_keep isl_morph *morph, |
49 | __isl_keep isl_space *space); |
50 | |
51 | __isl_give isl_space *isl_morph_get_dom_space(__isl_keep isl_morph *morph); |
52 | __isl_give isl_space *isl_morph_get_ran_space(__isl_keep isl_morph *morph); |
53 | __isl_give isl_multi_aff *isl_morph_get_var_multi_aff( |
54 | __isl_keep isl_morph *morph); |
55 | isl_size isl_morph_dom_dim(__isl_keep isl_morph *morph, enum isl_dim_type type); |
56 | isl_size isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type); |
57 | |
58 | __isl_give isl_morph *isl_morph_remove_dom_dims(__isl_take isl_morph *morph, |
59 | enum isl_dim_type type, unsigned first, unsigned n); |
60 | __isl_give isl_morph *isl_morph_remove_ran_dims(__isl_take isl_morph *morph, |
61 | enum isl_dim_type type, unsigned first, unsigned n); |
62 | __isl_give isl_morph *isl_morph_dom_params(__isl_take isl_morph *morph); |
63 | __isl_give isl_morph *isl_morph_ran_params(__isl_take isl_morph *morph); |
64 | |
65 | __isl_give isl_morph *isl_morph_compose(__isl_take isl_morph *morph1, |
66 | __isl_take isl_morph *morph2); |
67 | __isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph); |
68 | |
69 | void isl_morph_print_internal(__isl_take isl_morph *morph, FILE *out); |
70 | void isl_morph_dump(__isl_take isl_morph *morph); |
71 | |
72 | __isl_give isl_morph *isl_basic_set_variable_compression( |
73 | __isl_keep isl_basic_set *bset, enum isl_dim_type type); |
74 | __isl_give isl_morph *isl_basic_set_variable_compression_with_id( |
75 | __isl_keep isl_basic_set *bset, __isl_keep isl_id *id); |
76 | __isl_give isl_morph *isl_basic_set_parameter_compression( |
77 | __isl_keep isl_basic_set *bset); |
78 | __isl_give isl_morph *isl_basic_set_full_compression( |
79 | __isl_keep isl_basic_set *bset); |
80 | |
81 | __isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, |
82 | __isl_take isl_basic_set *bset); |
83 | __isl_give isl_set *isl_morph_set(__isl_take isl_morph *morph, |
84 | __isl_take isl_set *set); |
85 | __isl_give isl_vec *isl_morph_vec(__isl_take isl_morph *morph, |
86 | __isl_take isl_vec *vec); |
87 | |
88 | #if defined(__cplusplus) |
89 | } |
90 | #endif |
91 | |
92 | #endif |
93 | |