From: Sven Verdoolaege Date: Sat, 15 Aug 2009 09:08:13 +0000 (+0200) Subject: add isl_vec_mat_product X-Git-Tag: isl-0.01~69 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3e2ab6e255665c1e7a2c34c9eb233b7696bf88fb;p=platform%2Fupstream%2Fisl.git add isl_vec_mat_product --- diff --git a/isl_mat.c b/isl_mat.c index c96017e..5cc2526 100644 --- a/isl_mat.c +++ b/isl_mat.c @@ -236,6 +236,34 @@ error: return NULL; } +struct isl_vec *isl_vec_mat_product(struct isl_vec *vec, struct isl_mat *mat) +{ + int i, j; + struct isl_vec *prod; + + if (!mat || !vec) + goto error; + + isl_assert(ctx, mat->n_row == vec->size, goto error); + + prod = isl_vec_alloc(mat->ctx, mat->n_col); + if (!prod) + goto error; + + for (i = 0; i < prod->size; ++i) { + isl_int_set_si(prod->el[i], 0); + for (j = 0; j < vec->size; ++j) + isl_int_addmul(prod->el[i], vec->el[j], mat->row[j][i]); + } + isl_mat_free(mat); + isl_vec_free(vec); + return prod; +error: + isl_mat_free(mat); + isl_vec_free(vec); + return NULL; +} + struct isl_mat *isl_mat_aff_direct_sum(struct isl_mat *left, struct isl_mat *right) { diff --git a/isl_mat.h b/isl_mat.h index ed82ec2..6e44a96 100644 --- a/isl_mat.h +++ b/isl_mat.h @@ -53,6 +53,7 @@ struct isl_mat *isl_mat_swap_cols(struct isl_mat *mat, unsigned i, unsigned j); struct isl_mat *isl_mat_swap_rows(struct isl_mat *mat, unsigned i, unsigned j); struct isl_vec *isl_mat_vec_product(struct isl_mat *mat, struct isl_vec *vec); +struct isl_vec *isl_vec_mat_product(struct isl_vec *vec, struct isl_mat *mat); struct isl_mat *isl_mat_aff_direct_sum(struct isl_mat *left, struct isl_mat *right); struct isl_mat *isl_mat_left_hermite(struct isl_mat *M,