#include <isl_multi_templ.c>
-/* Scale the first elements of "ma" by the corresponding elements of "vec".
- */
-__isl_give isl_multi_aff *isl_multi_aff_scale_vec(__isl_take isl_multi_aff *ma,
- __isl_take isl_vec *vec)
-{
- int i, n;
- isl_int v;
-
- if (!ma || !vec)
- goto error;
-
- n = isl_multi_aff_dim(ma, isl_dim_out);
- if (isl_vec_size(vec) < n)
- n = isl_vec_size(vec);
-
- isl_int_init(v);
- for (i = 0; i < n; ++i) {
- isl_aff *aff;
-
- isl_vec_get_element(vec, i, &v);
-
- aff = isl_multi_aff_get_aff(ma, i);
- aff = isl_aff_scale(aff, v);
- ma = isl_multi_aff_set_aff(ma, i, aff);
- }
- isl_int_clear(v);
-
- isl_vec_free(vec);
- return ma;
-error:
- isl_vec_free(vec);
- isl_multi_aff_free(ma);
- return NULL;
-}
-
-/* Scale the first elements of "pma" by the corresponding elements of "vec".
- */
-__isl_give isl_pw_multi_aff *isl_pw_multi_aff_scale_vec(
- __isl_take isl_pw_multi_aff *pma, __isl_take isl_vec *v)
-{
- int i;
-
- pma = isl_pw_multi_aff_cow(pma);
- if (!pma || !v)
- goto error;
-
- for (i = 0; i < pma->n; ++i) {
- pma->p[i].maff = isl_multi_aff_scale_vec(pma->p[i].maff,
- isl_vec_copy(v));
- if (!pma->p[i].maff)
- goto error;
- }
-
- isl_vec_free(v);
- return pma;
-error:
- isl_vec_free(v);
- isl_pw_multi_aff_free(pma);
- return NULL;
-}
-
-/* This function is called for each entry of an isl_union_pw_multi_aff.
- * Replace the entry by the result of applying isl_pw_multi_aff_scale_vec
- * to the original entry with the isl_vec in "user" as extra argument.
- */
-static int union_pw_multi_aff_scale_vec_entry(void **entry, void *user)
-{
- isl_pw_multi_aff **pma = (isl_pw_multi_aff **) entry;
- isl_vec *v = user;
-
- *pma = isl_pw_multi_aff_scale_vec(*pma, isl_vec_copy(v));
- if (!*pma)
- return -1;
-
- return 0;
-}
-
-/* Scale the first elements of "upma" by the corresponding elements of "vec".
- */
-__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_scale_vec(
- __isl_take isl_union_pw_multi_aff *upma, __isl_take isl_vec *v)
-{
- upma = isl_union_pw_multi_aff_cow(upma);
- if (!upma || !v)
- goto error;
-
- if (isl_hash_table_foreach(upma->dim->ctx, &upma->table,
- &union_pw_multi_aff_scale_vec_entry, v) < 0)
- goto error;
-
- isl_vec_free(v);
- return upma;
-error:
- isl_vec_free(v);
- isl_union_pw_multi_aff_free(upma);
- return NULL;
-}
-
/* Scale the elements of "pma" by the corresponding elements of "mv".
*/
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_scale_multi_val(