57 S(
UNION,group) *group = *entry;
58 S(
UNION,foreach_group_data) *data;
61 return data->fn(group, data->user);
76 &
FN(
UNION,call_on_group), &data);
91 *
n += group->part_table.n;
130 &
FN(
UNION,free_group_entry), NULL);
152 group->domain_space = domain_space;
154 return FN(
UNION,group_free)(group);
170 part_space =
FN(
PART,peek_space)(part);
194 part =
FN(
PART,copy)(part);
197 return data->fn(part, data->user);
223 return FN(
UNION,foreach_group)(u, &
FN(
UNION,group_call_on_copy), &data);
262 &
FN(
UNION,group_has_same_domain_space_tuples), space, reserve);
265 if (reserve && !group_entry->
data) {
268 group_entry->
data = group;
270 group = group_entry->
data;
272 group =
FN(
UNION,group_cow)(group);
297 if (!u || !part_entry)
300 part = part_entry->data;
302 space =
FN(
PART,peek_space)(part);
305 &
FN(
UNION,group_has_same_domain_space_tuples), space, 0);
311 group = group_entry->
data;
315 if (group->part_table.n != 0)
332 if (!part1 || !part2)
349 PART *other = *entry;
359 disjoint =
FN(
UNION,disjoint_domain)(part, other);
364 "overlapping domain with other part",
388 space =
FN(
PART,peek_space)(part);
391 &
FN(
UNION,group_has_same_domain_space_tuples), space, 0);
396 group = group_entry->
data;
398 &
FN(
UNION,check_disjoint_domain_entry), part);
410 disjoint =
FN(
UNION,disjoint_domain)(part1, part2);
415 "domain of additional part should be disjoint",
459 S(
UNION,group) *group = *entry;
501 &
FN(
UNION,group_single_space), &single) < 0)
520 *part_p =
FN(
PART,copy)(part);
534 if (has_single_space < 0)
536 if (!has_single_space)
538 "expecting elements in exactly one space",
540 if (
FN(
UNION,foreach_inplace)(u, &
FN(
UNION,extract_part), &part) < 0)
541 part =
FN(
PART,free)(part);
#define isl_calloc_type(ctx, type)
#define isl_die(ctx, errno, msg, code)
isl_bool isl_bool_ok(int b)
void isl_hash_table_clear(struct isl_hash_table *table)
struct isl_hash_table_entry * isl_hash_table_entry_none
int isl_hash_table_init(struct isl_ctx *ctx, struct isl_hash_table *table, int min_size)
void isl_hash_table_remove(struct isl_ctx *ctx, struct isl_hash_table *table, struct isl_hash_table_entry *entry)
isl_stat isl_hash_table_foreach(isl_ctx *ctx, struct isl_hash_table *table, isl_stat(*fn)(void **entry, void *user), void *user)
struct isl_hash_table_entry * isl_hash_table_find(struct isl_ctx *ctx, struct isl_hash_table *table, uint32_t key_hash, isl_bool(*eq)(const void *entry, const void *val), const void *val, int reserve)
__isl_export __isl_give ISL_HMAP __isl_take ISL_KEY __isl_take ISL_VAL * val
isl_stat isl_stat(* fn)(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, void *user)
isl_stat isl_stat(*) void user)
static isl_stat call_on_copy(void **entry, void *user)
uint32_t isl_space_get_tuple_domain_hash(__isl_keep isl_space *space)
isl_bool isl_space_has_domain_tuples(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
uint32_t isl_space_get_tuple_hash(__isl_keep isl_space *space)
static isl_bool has_space_tuples(const void *entry, const void *val)
__isl_export isl_bool isl_set_is_disjoint(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
__isl_null isl_set * isl_set_free(__isl_take isl_set *set)
__isl_null isl_space * isl_space_free(__isl_take isl_space *space)
isl_ctx * isl_space_get_ctx(__isl_keep isl_space *space)
__isl_give isl_space * isl_space_copy(__isl_keep isl_space *space)
__isl_export isl_bool isl_space_is_equal(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
isl_bool isl_space_has_equal_tuples(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
__isl_export __isl_give isl_space * isl_space_domain(__isl_take isl_space *space)
struct isl_hash_table table