int (*fn)(__isl_take isl_pw_qpolynomial *pwqp, void *user),
void *user);
+To extract the piecewise quasipolynomial from a union with a given dimension
+specification, use
+
+ __isl_give isl_pw_qpolynomial *
+ isl_union_pw_qpolynomial_extract_pw_qpolynomial(
+ __isl_keep isl_union_pw_qpolynomial *upwqp,
+ __isl_take isl_dim *dim);
+
To iterate over the cells in a piecewise quasipolynomial,
use either of the following two functions
int isl_union_pw_qpolynomial_foreach_pw_qpolynomial(
__isl_keep isl_union_pw_qpolynomial *upwqp,
int (*fn)(__isl_take isl_pw_qpolynomial *pwqp, void *user), void *user);
+__isl_give isl_pw_qpolynomial *isl_union_pw_qpolynomial_extract_pw_qpolynomial(
+ __isl_keep isl_union_pw_qpolynomial *upwqp, __isl_take isl_dim *dim);
__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial(
__isl_take isl_printer *p, __isl_keep isl_union_pw_qpolynomial *upwqp);
__isl_keep isl_union_pw_qpolynomial_fold *upwf,
int (*fn)(__isl_take isl_pw_qpolynomial_fold *pwf,
void *user), void *user);
+__isl_give isl_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold(
+ __isl_keep isl_union_pw_qpolynomial_fold *upwf, __isl_take isl_dim *dim);
__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial_fold(
__isl_take isl_printer *p,
return isl_dim_equal(part->dim, dim);
}
+__isl_give PART *FN(FN(UNION,extract),PARTS)(__isl_keep UNION *u,
+ __isl_take isl_dim *dim)
+{
+ uint32_t hash;
+ struct isl_hash_table_entry *entry;
+
+ if (!u || !dim)
+ goto error;
+
+ hash = isl_dim_get_hash(dim);
+ entry = isl_hash_table_find(u->dim->ctx, &u->table, hash,
+ &has_dim, dim, 0);
+ if (!entry)
+#ifdef HAS_TYPE
+ return FN(PART,zero)(dim, u->type);
+#else
+ return FN(PART,zero)(dim);
+#endif
+ isl_dim_free(dim);
+ return FN(PART,copy)(entry->data);
+error:
+ isl_dim_free(dim);
+ return NULL;
+}
+
__isl_give UNION *FN(FN(UNION,add),PARTS)(__isl_take UNION *u,
__isl_take PART *part)
{