diff options
author | Sven Verdoolaege <skimo@kotnet.org> | 2010-05-12 11:35:54 +0200 |
---|---|---|
committer | Sven Verdoolaege <skimo@kotnet.org> | 2010-05-13 18:53:54 +0200 |
commit | 8476b0ce1d296e591068452812ed78e62c7f70f2 (patch) | |
tree | 38832d06b3210394c86074ecbe1f6d5a12b02698 /isl_mat.c | |
parent | b4b6def475768cd6f364246473b7125b8b4afd8a (diff) | |
download | isl-8476b0ce1d296e591068452812ed78e62c7f70f2.tar.gz isl-8476b0ce1d296e591068452812ed78e62c7f70f2.tar.bz2 isl-8476b0ce1d296e591068452812ed78e62c7f70f2.zip |
add isl_mat_normalize
Diffstat (limited to 'isl_mat.c')
-rw-r--r-- | isl_mat.c | 45 |
1 files changed, 45 insertions, 0 deletions
@@ -1298,3 +1298,48 @@ error: isl_mat_free(mat); return NULL; } + +void isl_mat_gcd(__isl_keep isl_mat *mat, isl_int *gcd) +{ + int i; + isl_int g; + + isl_int_set_si(*gcd, 0); + if (!mat) + return; + + isl_int_init(g); + for (i = 0; i < mat->n_row; ++i) { + isl_seq_gcd(mat->row[i], mat->n_col, &g); + isl_int_gcd(*gcd, *gcd, g); + } + isl_int_clear(g); +} + +__isl_give isl_mat *isl_mat_scale_down(__isl_take isl_mat *mat, isl_int m) +{ + int i; + + if (!mat) + return NULL; + + for (i = 0; i < mat->n_row; ++i) + isl_seq_scale_down(mat->row[i], mat->row[i], m, mat->n_col); + + return mat; +} + +__isl_give isl_mat *isl_mat_normalize(__isl_take isl_mat *mat) +{ + isl_int gcd; + + if (!mat) + return NULL; + + isl_int_init(gcd); + isl_mat_gcd(mat, &gcd); + mat = isl_mat_scale_down(mat, gcd); + isl_int_clear(gcd); + + return mat; +} |