summaryrefslogtreecommitdiff
path: root/isl_mat.c
diff options
context:
space:
mode:
authorSven Verdoolaege <skimo@kotnet.org>2009-10-04 09:12:45 +0200
committerSven Verdoolaege <skimo@kotnet.org>2009-10-07 17:21:51 +0200
commit57d54714f97106508983e598bf271a262b54682d (patch)
tree6343400ddc7ca5ddeb37fa78fe2dde85dbb9e11f /isl_mat.c
parentca96d61404466e38d56ce42714e99ee698692696 (diff)
downloadisl-57d54714f97106508983e598bf271a262b54682d.tar.gz
isl-57d54714f97106508983e598bf271a262b54682d.tar.bz2
isl-57d54714f97106508983e598bf271a262b54682d.zip
add isl_mat_vec_inverse_product
Diffstat (limited to 'isl_mat.c')
-rw-r--r--isl_mat.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/isl_mat.c b/isl_mat.c
index e0f55b51..2b8f5401 100644
--- a/isl_mat.c
+++ b/isl_mat.c
@@ -236,6 +236,35 @@ error:
return NULL;
}
+__isl_give isl_vec *isl_mat_vec_inverse_product(__isl_take isl_mat *mat,
+ __isl_take isl_vec *vec)
+{
+ struct isl_mat *vec_mat;
+ int i;
+
+ if (!mat || !vec)
+ goto error;
+ vec_mat = isl_mat_alloc(vec->ctx, vec->size, 1);
+ if (!vec_mat)
+ goto error;
+ for (i = 0; i < vec->size; ++i)
+ isl_int_set(vec_mat->row[i][0], vec->el[i]);
+ vec_mat = isl_mat_inverse_product(mat, vec_mat);
+ isl_vec_free(vec);
+ if (!vec_mat)
+ return NULL;
+ vec = isl_vec_alloc(vec_mat->ctx, vec_mat->n_row);
+ if (vec)
+ for (i = 0; i < vec->size; ++i)
+ isl_int_set(vec->el[i], vec_mat->row[i][0]);
+ isl_mat_free(vec_mat);
+ return vec;
+error:
+ isl_mat_free(mat);
+ isl_vec_free(vec);
+ return NULL;
+}
+
struct isl_vec *isl_vec_mat_product(struct isl_vec *vec, struct isl_mat *mat)
{
int i, j;