diff options
author | Sven Verdoolaege <skimo@kotnet.org> | 2009-10-04 09:12:45 +0200 |
---|---|---|
committer | Sven Verdoolaege <skimo@kotnet.org> | 2009-10-07 17:21:51 +0200 |
commit | 57d54714f97106508983e598bf271a262b54682d (patch) | |
tree | 6343400ddc7ca5ddeb37fa78fe2dde85dbb9e11f /isl_mat.c | |
parent | ca96d61404466e38d56ce42714e99ee698692696 (diff) | |
download | isl-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.c | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -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; |