+
+ return NULL;
+}
+
+int isl_vec_size(__isl_keep isl_vec *vec)
+{
+ return vec ? vec->size : -1;
+}
+
+int isl_vec_get_element(__isl_keep isl_vec *vec, int pos, isl_int *v)
+{
+ if (!vec)
+ return -1;
+
+ if (pos < 0 || pos >= vec->size)
+ isl_die(vec->ctx, isl_error_invalid, "position out of range",
+ return -1);
+ isl_int_set(*v, vec->el[pos]);
+ return 0;
+}
+
+/* Extract the element at position "pos" of "vec".
+ */
+__isl_give isl_val *isl_vec_get_element_val(__isl_keep isl_vec *vec, int pos)
+{
+ isl_ctx *ctx;
+
+ if (!vec)
+ return NULL;
+ ctx = isl_vec_get_ctx(vec);
+ if (pos < 0 || pos >= vec->size)
+ isl_die(ctx, isl_error_invalid, "position out of range",
+ return NULL);
+ return isl_val_int_from_isl_int(ctx, vec->el[pos]);
+}
+
+__isl_give isl_vec *isl_vec_set_element(__isl_take isl_vec *vec,
+ int pos, isl_int v)
+{
+ vec = isl_vec_cow(vec);
+ if (!vec)
+ return NULL;
+ if (pos < 0 || pos >= vec->size)
+ isl_die(vec->ctx, isl_error_invalid, "position out of range",
+ goto error);
+ isl_int_set(vec->el[pos], v);
+ return vec;
+error:
+ isl_vec_free(vec);
+ return NULL;
+}
+
+__isl_give isl_vec *isl_vec_set_element_si(__isl_take isl_vec *vec,
+ int pos, int v)
+{
+ vec = isl_vec_cow(vec);
+ if (!vec)
+ return NULL;
+ if (pos < 0 || pos >= vec->size)
+ isl_die(vec->ctx, isl_error_invalid, "position out of range",
+ goto error);
+ isl_int_set_si(vec->el[pos], v);
+ return vec;
+error:
+ isl_vec_free(vec);
+ return NULL;
+}
+
+/* Replace the element at position "pos" of "vec" by "v".
+ */
+__isl_give isl_vec *isl_vec_set_element_val(__isl_take isl_vec *vec,
+ int pos, __isl_take isl_val *v)
+{
+ if (!v)
+ return isl_vec_free(vec);
+ if (!isl_val_is_int(v))
+ isl_die(isl_val_get_ctx(v), isl_error_invalid,
+ "expecting integer value", goto error);
+ vec = isl_vec_set_element(vec, pos, v->n);
+ isl_val_free(v);
+ return vec;
+error:
+ isl_val_free(v);
+ return isl_vec_free(vec);
+}
+
+/* Compare the elements of "vec1" and "vec2" at position "pos".
+ */
+int isl_vec_cmp_element(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2,
+ int pos)
+{
+ if (!vec1 || !vec2)
+ return 0;
+ if (pos < 0 || pos >= vec1->size || pos >= vec2->size)
+ isl_die(isl_vec_get_ctx(vec1), isl_error_invalid,
+ "position out of range", return 0);
+ return isl_int_cmp(vec1->el[pos], vec2->el[pos]);
+}
+
+int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2)
+{
+ if (!vec1 || !vec2)
+ return -1;
+
+ if (vec1->size != vec2->size)
+ return 0;
+
+ return isl_seq_eq(vec1->el, vec2->el, vec1->size);