add isl_mat_swap_cols
[platform/upstream/isl.git] / isl_vec.c
index 215e239..59c26a9 100644 (file)
--- a/isl_vec.c
+++ b/isl_vec.c
@@ -30,6 +30,31 @@ struct isl_vec *isl_vec_copy(struct isl_ctx *ctx, struct isl_vec *vec)
        return vec;
 }
 
+struct isl_vec *isl_vec_dup(struct isl_ctx *ctx, struct isl_vec *vec)
+{
+       struct isl_vec *vec2;
+
+       if (!vec)
+               return NULL;
+       vec2 = isl_vec_alloc(ctx, vec->size);
+       isl_seq_cpy(vec2->block.data, vec->block.data, vec->size);
+       return vec2;
+}
+
+struct isl_vec *isl_vec_cow(struct isl_ctx *ctx, struct isl_vec *vec)
+{
+       struct isl_vec *vec2;
+       if (!vec)
+               return NULL;
+
+       if (vec->ref == 1)
+               return vec;
+
+       vec2 = isl_vec_dup(ctx, vec);
+       isl_vec_free(ctx, vec);
+       return vec2;
+}
+
 void isl_vec_free(struct isl_ctx *ctx, struct isl_vec *vec)
 {
        if (!vec)
@@ -54,3 +79,8 @@ void isl_vec_dump(struct isl_ctx *ctx, struct isl_vec *vec,
        }
        fprintf(out, "]\n");
 }
+
+void isl_vec_lcm(struct isl_ctx *ctx, struct isl_vec *vec, isl_int *lcm)
+{
+       isl_seq_lcm(vec->block.data, vec->size, lcm);
+}