1#ifndef ISL_AFF_PRIVATE_H
2#define ISL_AFF_PRIVATE_H
3
4#include <isl/aff.h>
5#include <isl/vec.h>
6#include <isl/mat.h>
7#include <isl/local_space.h>
8#include <isl_reordering.h>
9
10/* ls represents the domain space.
11 */
12struct isl_aff {
13	int ref;
14
15	isl_local_space	*ls;
16	isl_vec		*v;
17};
18
19#undef EL
20#define EL isl_aff
21
22#include <isl_list_templ.h>
23
24struct isl_pw_aff_piece {
25	struct isl_set *set;
26	struct isl_aff *aff;
27};
28
29struct isl_pw_aff {
30	int ref;
31
32	isl_space *dim;
33
34	int n;
35
36	size_t size;
37	struct isl_pw_aff_piece p[1];
38};
39
40#undef EL
41#define EL isl_pw_aff
42
43#include <isl_list_templ.h>
44
45struct isl_pw_multi_aff_piece {
46	isl_set *set;
47	isl_multi_aff *maff;
48};
49
50struct isl_pw_multi_aff {
51	int ref;
52
53	isl_space *dim;
54
55	int n;
56
57	size_t size;
58	struct isl_pw_multi_aff_piece p[1];
59};
60
61__isl_give isl_aff *isl_aff_alloc(__isl_take isl_local_space *ls);
62
63__isl_give isl_aff *isl_aff_reset_space_and_domain(__isl_take isl_aff *aff,
64	__isl_take isl_space *space, __isl_take isl_space *domain);
65__isl_give isl_aff *isl_aff_reset_domain_space(__isl_take isl_aff *aff,
66	__isl_take isl_space *dim);
67__isl_give isl_aff *isl_aff_realign_domain(__isl_take isl_aff *aff,
68	__isl_take isl_reordering *r);
69
70__isl_give isl_aff *isl_aff_normalize(__isl_take isl_aff *aff);
71
72__isl_give isl_aff *isl_aff_expand_divs( __isl_take isl_aff *aff,
73	__isl_take isl_mat *div, int *exp);
74
75__isl_give isl_pw_aff *isl_pw_aff_alloc_size(__isl_take isl_space *space,
76	int n);
77__isl_give isl_pw_aff *isl_pw_aff_reset_space(__isl_take isl_pw_aff *pwaff,
78	__isl_take isl_space *dim);
79__isl_give isl_pw_aff *isl_pw_aff_reset_domain_space(
80	__isl_take isl_pw_aff *pwaff, __isl_take isl_space *space);
81__isl_give isl_pw_aff *isl_pw_aff_add_disjoint(
82	__isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2);
83
84__isl_give isl_pw_aff *isl_pw_aff_union_opt(__isl_take isl_pw_aff *pwaff1,
85	__isl_take isl_pw_aff *pwaff2, int max);
86
87__isl_give isl_pw_aff *isl_pw_aff_set_rational(__isl_take isl_pw_aff *pwaff);
88__isl_give isl_pw_aff_list *isl_pw_aff_list_set_rational(
89	__isl_take isl_pw_aff_list *list);
90
91int isl_aff_check_match_domain_space(__isl_keep isl_aff *aff,
92	__isl_keep isl_space *space);
93
94#undef BASE
95#define BASE aff
96
97#include <isl_multi_templ.h>
98
99__isl_give isl_multi_aff *isl_multi_aff_dup(__isl_keep isl_multi_aff *multi);
100
101__isl_give isl_multi_aff *isl_multi_aff_align_divs(
102	__isl_take isl_multi_aff *maff);
103
104__isl_give isl_pw_multi_aff *isl_pw_multi_aff_reset_domain_space(
105	__isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space);
106__isl_give isl_pw_multi_aff *isl_pw_multi_aff_reset_space(
107	__isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space);
108__isl_give isl_pw_multi_aff *isl_pw_multi_aff_add_disjoint(
109	__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
110
111__isl_give isl_pw_multi_aff *isl_pw_multi_aff_project_out(
112	__isl_take isl_pw_multi_aff *pma,
113	enum isl_dim_type type, unsigned first, unsigned n);
114
115void isl_seq_substitute(isl_int *p, int pos, isl_int *subs,
116	int p_len, int subs_len, isl_int v);
117void isl_seq_preimage(isl_int *dst, isl_int *src,
118	__isl_keep isl_multi_aff *ma, int n_before, int n_after,
119	int n_div_ma, int n_div_bmap,
120	isl_int f, isl_int c1, isl_int c2, isl_int g, int has_denom);
121
122__isl_give isl_pw_multi_aff *isl_pw_multi_aff_substitute(
123	__isl_take isl_pw_multi_aff *pma, enum isl_dim_type type, unsigned pos,
124	__isl_keep isl_pw_aff *subs);
125
126int isl_pw_aff_check_match_domain_space(__isl_keep isl_pw_aff *pa,
127	__isl_keep isl_space *space);
128
129#undef BASE
130#define BASE pw_aff
131
132#include <isl_multi_templ.h>
133
134#endif
135