add exported isl_multi_aff_domain_reverse
[isl.git] / include / isl / multi.h
blob185a8c2ab4d1aef0f3b8242d5c522eb9a841a6bd
1 #ifndef ISL_MULTI_H
2 #define ISL_MULTI_H
4 #include <isl/val_type.h>
5 #include <isl/space_type.h>
6 #include <isl/list.h>
7 #include <isl/set_type.h>
9 #if defined(__cplusplus)
10 extern "C" {
11 #endif
13 #define ISL_DECLARE_MULTI(BASE) \
14 isl_ctx *isl_multi_##BASE##_get_ctx( \
15 __isl_keep isl_multi_##BASE *multi); \
16 __isl_export \
17 __isl_give isl_space *isl_multi_##BASE##_get_space( \
18 __isl_keep isl_multi_##BASE *multi); \
19 __isl_give isl_space *isl_multi_##BASE##_get_domain_space( \
20 __isl_keep isl_multi_##BASE *multi); \
21 __isl_export \
22 __isl_give isl_##BASE##_list *isl_multi_##BASE##_get_list( \
23 __isl_keep isl_multi_##BASE *multi); \
24 __isl_constructor \
25 __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_##BASE##_list( \
26 __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
27 __isl_export \
28 __isl_give isl_multi_##BASE *isl_space_multi_##BASE( \
29 __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
30 __isl_give isl_multi_##BASE *isl_multi_##BASE##_copy( \
31 __isl_keep isl_multi_##BASE *multi); \
32 __isl_null isl_multi_##BASE *isl_multi_##BASE##_free( \
33 __isl_take isl_multi_##BASE *multi); \
34 __isl_export \
35 isl_bool isl_multi_##BASE##_plain_is_equal( \
36 __isl_keep isl_multi_##BASE *multi1, \
37 __isl_keep isl_multi_##BASE *multi2); \
38 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_user( \
39 __isl_take isl_multi_##BASE *multi); \
40 __isl_export \
41 isl_size isl_multi_##BASE##_size(__isl_keep isl_multi_##BASE *multi); \
42 __isl_export \
43 __isl_give isl_##BASE *isl_multi_##BASE##_get_at( \
44 __isl_keep isl_multi_##BASE *multi, int pos); \
45 __isl_give isl_##BASE *isl_multi_##BASE##_get_##BASE( \
46 __isl_keep isl_multi_##BASE *multi, int pos); \
47 __isl_export \
48 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_at( \
49 __isl_take isl_multi_##BASE *multi, int pos, \
50 __isl_take isl_##BASE *el); \
51 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE( \
52 __isl_take isl_multi_##BASE *multi, int pos, \
53 __isl_take isl_##BASE *el); \
54 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_splice( \
55 __isl_take isl_multi_##BASE *multi1, unsigned pos, \
56 __isl_take isl_multi_##BASE *multi2); \
57 __isl_give isl_multi_##BASE *isl_multi_##BASE##_flatten_range( \
58 __isl_take isl_multi_##BASE *multi); \
59 __isl_export \
60 __isl_give isl_multi_##BASE *isl_multi_##BASE##_flat_range_product( \
61 __isl_take isl_multi_##BASE *multi1, \
62 __isl_take isl_multi_##BASE *multi2); \
63 __isl_export \
64 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product( \
65 __isl_take isl_multi_##BASE *multi1, \
66 __isl_take isl_multi_##BASE *multi2); \
67 __isl_give isl_multi_##BASE *isl_multi_##BASE##_factor_range( \
68 __isl_take isl_multi_##BASE *multi); \
69 isl_bool isl_multi_##BASE##_range_is_wrapping( \
70 __isl_keep isl_multi_##BASE *multi); \
71 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_domain( \
72 __isl_take isl_multi_##BASE *multi); \
73 __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_range( \
74 __isl_take isl_multi_##BASE *multi); \
75 __isl_give isl_multi_##BASE *isl_multi_##BASE##_align_params( \
76 __isl_take isl_multi_##BASE *multi, \
77 __isl_take isl_space *model); \
78 __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_range( \
79 __isl_take isl_multi_##BASE *multi);
81 #define ISL_DECLARE_MULTI_IDENTITY(BASE) \
82 __isl_overload \
83 __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity_multi_##BASE( \
84 __isl_take isl_multi_##BASE *multi); \
85 __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity( \
86 __isl_take isl_space *space); \
87 __isl_overload \
88 __isl_give isl_multi_##BASE * \
89 isl_multi_##BASE##_identity_on_domain_space( \
90 __isl_take isl_space *space); \
91 __isl_export \
92 __isl_give isl_multi_##BASE * \
93 isl_space_identity_multi_##BASE##_on_domain( \
94 __isl_take isl_space *space);
96 #define ISL_DECLARE_MULTI_CMP(BASE) \
97 int isl_multi_##BASE##_plain_cmp(__isl_keep isl_multi_##BASE *multi1, \
98 __isl_keep isl_multi_##BASE *multi2);
100 #define ISL_DECLARE_MULTI_ARITH(BASE) \
101 __isl_overload \
102 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_val( \
103 __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \
104 __isl_overload \
105 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_val( \
106 __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \
107 __isl_overload \
108 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_multi_val( \
109 __isl_take isl_multi_##BASE *multi, \
110 __isl_take isl_multi_val *mv); \
111 __isl_overload \
112 __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_multi_val( \
113 __isl_take isl_multi_##BASE *multi, \
114 __isl_take isl_multi_val *mv); \
115 __isl_give isl_multi_##BASE *isl_multi_##BASE##_mod_multi_val( \
116 __isl_take isl_multi_##BASE *multi, \
117 __isl_take isl_multi_val *mv); \
118 __isl_export \
119 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add( \
120 __isl_take isl_multi_##BASE *multi1, \
121 __isl_take isl_multi_##BASE *multi2); \
122 __isl_export \
123 __isl_give isl_multi_##BASE *isl_multi_##BASE##_sub( \
124 __isl_take isl_multi_##BASE *multi1, \
125 __isl_take isl_multi_##BASE *multi2); \
126 __isl_export \
127 __isl_give isl_multi_##BASE *isl_multi_##BASE##_neg( \
128 __isl_take isl_multi_##BASE *multi);
130 #define ISL_DECLARE_MULTI_MIN_MAX(BASE) \
131 __isl_export \
132 __isl_give isl_multi_##BASE *isl_multi_##BASE##_min( \
133 __isl_take isl_multi_##BASE *multi1, \
134 __isl_take isl_multi_##BASE *multi2); \
135 __isl_export \
136 __isl_give isl_multi_##BASE *isl_multi_##BASE##_max( \
137 __isl_take isl_multi_##BASE *multi1, \
138 __isl_take isl_multi_##BASE *multi2);
140 #define ISL_DECLARE_MULTI_ADD_CONSTANT(BASE) \
141 __isl_overload \
142 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_val( \
143 __isl_take isl_multi_##BASE *mpa, __isl_take isl_val *v); \
144 __isl_overload \
145 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_multi_val( \
146 __isl_take isl_multi_##BASE *mpa, __isl_take isl_multi_val *mv);
148 #define ISL_DECLARE_MULTI_ZERO(BASE) \
149 __isl_export \
150 __isl_give isl_multi_##BASE *isl_multi_##BASE##_zero( \
151 __isl_take isl_space *space); \
152 __isl_export \
153 __isl_give isl_multi_##BASE *isl_space_zero_multi_##BASE( \
154 __isl_take isl_space *space);
156 #define ISL_DECLARE_MULTI_NAN(BASE) \
157 __isl_export \
158 isl_bool isl_multi_##BASE##_involves_nan( \
159 __isl_keep isl_multi_##BASE *multi);
161 #define ISL_DECLARE_MULTI_DROP_DIMS(BASE) \
162 isl_size isl_multi_##BASE##_dim(__isl_keep isl_multi_##BASE *multi, \
163 enum isl_dim_type type); \
164 __isl_give isl_multi_##BASE *isl_multi_##BASE##_drop_dims( \
165 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
166 unsigned first, unsigned n);
167 #define ISL_DECLARE_MULTI_DIMS(BASE) \
168 ISL_DECLARE_MULTI_DROP_DIMS(BASE) \
169 isl_bool isl_multi_##BASE##_involves_dims( \
170 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \
171 unsigned first, unsigned n); \
172 __isl_give isl_multi_##BASE *isl_multi_##BASE##_insert_dims( \
173 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
174 unsigned first, unsigned n); \
175 __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_dims( \
176 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
177 unsigned n); \
178 __isl_give isl_multi_##BASE * \
179 isl_multi_##BASE##_project_domain_on_params( \
180 __isl_take isl_multi_##BASE *multi);
182 #define ISL_DECLARE_MULTI_INSERT_DOMAIN(BASE) \
183 __isl_export \
184 __isl_give isl_multi_##BASE * \
185 isl_multi_##BASE##_insert_domain(__isl_take isl_multi_##BASE *multi, \
186 __isl_take isl_space *domain);
188 #define ISL_DECLARE_MULTI_LOCALS(BASE) \
189 __isl_export \
190 isl_bool isl_multi_##BASE##_involves_locals( \
191 __isl_keep isl_multi_##BASE *multi);
193 #define ISL_DECLARE_MULTI_DIM_ID(BASE) \
194 int isl_multi_##BASE##_find_dim_by_name( \
195 __isl_keep isl_multi_##BASE *multi, \
196 enum isl_dim_type type, const char *name); \
197 int isl_multi_##BASE##_find_dim_by_id( \
198 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \
199 __isl_keep isl_id *id); \
200 __isl_give isl_id *isl_multi_##BASE##_get_dim_id( \
201 __isl_keep isl_multi_##BASE *multi, \
202 enum isl_dim_type type, unsigned pos); \
203 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_name( \
204 __isl_take isl_multi_##BASE *multi, \
205 enum isl_dim_type type, unsigned pos, const char *s); \
206 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_id( \
207 __isl_take isl_multi_##BASE *multi, \
208 enum isl_dim_type type, unsigned pos, __isl_take isl_id *id);
210 #define ISL_DECLARE_MULTI_TUPLE_ID(BASE) \
211 const char *isl_multi_##BASE##_get_tuple_name( \
212 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
213 __isl_export \
214 isl_bool isl_multi_##BASE##_has_range_tuple_id( \
215 __isl_keep isl_multi_##BASE *multi); \
216 isl_bool isl_multi_##BASE##_has_tuple_id( \
217 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
218 __isl_export \
219 __isl_give isl_id *isl_multi_##BASE##_get_range_tuple_id( \
220 __isl_keep isl_multi_##BASE *multi); \
221 __isl_give isl_id *isl_multi_##BASE##_get_tuple_id( \
222 __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
223 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name( \
224 __isl_take isl_multi_##BASE *multi, \
225 enum isl_dim_type type, const char *s); \
226 __isl_overload \
227 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_range_tuple_id( \
228 __isl_take isl_multi_##BASE *multi, __isl_take isl_id *id); \
229 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_id( \
230 __isl_take isl_multi_##BASE *multi, \
231 enum isl_dim_type type, __isl_take isl_id *id); \
232 __isl_export \
233 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_range_tuple_id( \
234 __isl_take isl_multi_##BASE *multi); \
235 __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_tuple_id( \
236 __isl_take isl_multi_##BASE *multi, enum isl_dim_type type);
238 #define ISL_DECLARE_MULTI_WITH_DOMAIN(BASE) \
239 __isl_export \
240 __isl_give isl_multi_##BASE *isl_multi_##BASE##_product( \
241 __isl_take isl_multi_##BASE *multi1, \
242 __isl_take isl_multi_##BASE *multi2); \
243 __isl_give isl_multi_##BASE *isl_multi_##BASE##_splice( \
244 __isl_take isl_multi_##BASE *multi1, unsigned in_pos, \
245 unsigned out_pos, __isl_take isl_multi_##BASE *multi2);
247 #define ISL_DECLARE_MULTI_BIND_DOMAIN(BASE) \
248 __isl_export \
249 __isl_give isl_multi_##BASE *isl_multi_##BASE##_bind_domain( \
250 __isl_take isl_multi_##BASE *multi, \
251 __isl_take isl_multi_id *tuple); \
252 __isl_export \
253 __isl_give isl_multi_##BASE * \
254 isl_multi_##BASE##_bind_domain_wrapped_domain( \
255 __isl_take isl_multi_##BASE *multi, \
256 __isl_take isl_multi_id *tuple);
258 #define ISL_DECLARE_MULTI_UNBIND_PARAMS(BASE) \
259 __isl_export \
260 __isl_give isl_multi_##BASE * \
261 isl_multi_##BASE##_unbind_params_insert_domain( \
262 __isl_take isl_multi_##BASE *multi, \
263 __isl_take isl_multi_id *domain);
265 #define ISL_DECLARE_MULTI_PARAM(BASE) \
266 __isl_overload \
267 isl_bool isl_multi_##BASE##_involves_param_id( \
268 __isl_keep isl_multi_##BASE *multi, __isl_keep isl_id *id); \
269 __isl_overload \
270 isl_bool isl_multi_##BASE##_involves_param_id_list( \
271 __isl_keep isl_multi_##BASE *multi, \
272 __isl_keep isl_id_list *list);
274 #define ISL_DECLARE_MULTI_DOMAIN_REVERSE(BASE) \
275 __isl_export \
276 __isl_give isl_multi_##BASE *isl_multi_##BASE##_domain_reverse( \
277 __isl_take isl_multi_##BASE *multi);
279 #if defined(__cplusplus)
281 #endif
283 #endif