return any_set_op(u, set, &FN(PW,gist_params));
}
-S(UNION,match_set_data) {
+S(UNION,match_domain_data) {
isl_union_set *uset;
UNION *res;
__isl_give PW *(*fn)(__isl_take PW*, __isl_take isl_set*);
return isl_space_is_equal(set->dim, dim);
}
-static int match_set_entry(void **entry, void *user)
+/* Find the set in data->uset that live in the same space as the domain
+ * of *entry, apply data->fn to *entry and this set (if any), and add
+ * the result to data->res.
+ */
+static int match_domain_entry(void **entry, void *user)
{
- S(UNION,match_set_data) *data = user;
+ S(UNION,match_domain_data) *data = user;
uint32_t hash;
struct isl_hash_table_entry *entry2;
PW *pw = *entry;
+ isl_space *space;
int empty;
- hash = isl_space_get_hash(pw->dim);
+ space = FN(PW,get_domain_space)(pw);
+ hash = isl_space_get_hash(space);
entry2 = isl_hash_table_find(data->uset->dim->ctx, &data->uset->table,
- hash, &set_has_dim, pw->dim, 0);
+ hash, &set_has_dim, space, 0);
+ isl_space_free(space);
if (!entry2)
return 0;
return 0;
}
-static __isl_give UNION *match_set_op(__isl_take UNION *u,
+/* Apply fn to each pair of PW in u and set in uset such that
+ * the set lives in the same space as the domain of PW
+ * and collect the results.
+ */
+static __isl_give UNION *match_domain_op(__isl_take UNION *u,
__isl_take isl_union_set *uset,
__isl_give PW *(*fn)(__isl_take PW*, __isl_take isl_set*))
{
- S(UNION,match_set_data) data = { NULL, NULL, fn };
+ S(UNION,match_domain_data) data = { NULL, NULL, fn };
u = FN(UNION,align_params)(u, isl_union_set_get_space(uset));
uset = isl_union_set_align_params(uset, FN(UNION,get_space)(u));
data.res = FN(UNION,alloc)(isl_space_copy(u->dim), u->table.n);
#endif
if (isl_hash_table_foreach(u->dim->ctx, &u->table,
- &match_set_entry, &data) < 0)
+ &match_domain_entry, &data) < 0)
goto error;
FN(UNION,free)(u);
if (isl_union_set_is_params(uset))
return FN(UNION,intersect_params)(u,
isl_set_from_union_set(uset));
- return match_set_op(u, uset, &FN(PW,intersect_domain));
+ return match_domain_op(u, uset, &FN(PW,intersect_domain));
}
__isl_give UNION *FN(UNION,gist)(__isl_take UNION *u,
{
if (isl_union_set_is_params(uset))
return FN(UNION,gist_params)(u, isl_set_from_union_set(uset));
- return match_set_op(u, uset, &FN(PW,gist));
+ return match_domain_op(u, uset, &FN(PW,gist));
}
__isl_give isl_qpolynomial *FN(UNION,eval)(__isl_take UNION *u,