summaryrefslogtreecommitdiff
path: root/isl_mat.c
diff options
context:
space:
mode:
authorSven Verdoolaege <skimo@kotnet.org>2009-08-15 11:08:13 +0200
committerSven Verdoolaege <skimo@kotnet.org>2009-08-28 19:42:19 +0200
commit3e2ab6e255665c1e7a2c34c9eb233b7696bf88fb (patch)
treee76b8a5a448241a5882c81d572f53b755bc2bb59 /isl_mat.c
parentfe8b6ab12a6001b22c8fc11e9854623af4b306b5 (diff)
downloadisl-3e2ab6e255665c1e7a2c34c9eb233b7696bf88fb.tar.gz
isl-3e2ab6e255665c1e7a2c34c9eb233b7696bf88fb.tar.bz2
isl-3e2ab6e255665c1e7a2c34c9eb233b7696bf88fb.zip
add isl_vec_mat_product
Diffstat (limited to 'isl_mat.c')
-rw-r--r--isl_mat.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/isl_mat.c b/isl_mat.c
index c96017ed..5cc25261 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)
{