introduce internal isl_dim_map for representing mappings between dimensions
[platform/upstream/isl.git] / include / isl_dim.h
1 #ifndef ISL_DIM_H
2 #define ISL_DIM_H
3
4 #include <isl_ctx.h>
5
6 #if defined(__cplusplus)
7 extern "C" {
8 #endif
9
10 struct isl_dim {
11         int ref;
12
13         struct isl_ctx *ctx;
14
15         unsigned nparam;
16         unsigned n_in;          /* zero for sets */
17         unsigned n_out;         /* dim for sets */
18 };
19
20 enum isl_dim_type {
21         isl_dim_param,
22         isl_dim_in,
23         isl_dim_out,
24         isl_dim_set = isl_dim_out,
25 };
26
27 struct isl_dim *isl_dim_alloc(struct isl_ctx *ctx,
28                         unsigned nparam, unsigned n_in, unsigned n_out);
29 struct isl_dim *isl_dim_copy(struct isl_dim *dim);
30 struct isl_dim *isl_dim_cow(struct isl_dim *dim);
31 void isl_dim_free(struct isl_dim *dim);
32
33 struct isl_dim *isl_dim_join(struct isl_dim *left, struct isl_dim *right);
34 struct isl_dim *isl_dim_reverse(struct isl_dim *dim);
35
36 int isl_dim_equal(struct isl_dim *dim1, struct isl_dim *dim2);
37 int isl_dim_compatible(struct isl_dim *dim1, struct isl_dim *dim2);
38 unsigned isl_dim_total(struct isl_dim *dim);
39
40 #if defined(__cplusplus)
41 }
42 #endif
43
44 #endif