Lines Matching refs:vec
18 isl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec)
20 return vec ? vec->ctx : NULL;
23 /* Return a hash value that digests "vec".
25 uint32_t isl_vec_get_hash(__isl_keep isl_vec *vec)
27 if (!vec)
30 return isl_seq_get_hash(vec->el, vec->size);
35 struct isl_vec *vec;
37 vec = isl_alloc_type(ctx, struct isl_vec);
38 if (!vec)
41 vec->block = isl_blk_alloc(ctx, size);
42 if (isl_blk_is_error(vec->block))
45 vec->ctx = ctx;
47 vec->ref = 1;
48 vec->size = size;
49 vec->el = vec->block.data;
51 return vec;
53 isl_blk_free(ctx, vec->block);
54 free(vec);
58 __isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size)
60 if (!vec)
62 if (size <= vec->size)
63 return vec;
65 vec = isl_vec_cow(vec);
66 if (!vec)
69 vec->block = isl_blk_extend(vec->ctx, vec->block, size);
70 if (!vec->block.data)
73 vec->size = size;
74 vec->el = vec->block.data;
76 return vec;
78 isl_vec_free(vec);
87 __isl_give isl_vec *isl_vec_expand(__isl_take isl_vec *vec, int pos, int n,
93 if (!vec)
96 isl_die(isl_vec_get_ctx(vec), isl_error_invalid,
97 "not an expansion", return isl_vec_free(vec));
99 return vec;
100 if (pos < 0 || n < 0 || pos + n > vec->size)
101 isl_die(isl_vec_get_ctx(vec), isl_error_invalid,
102 "position out of bounds", return isl_vec_free(vec));
104 old_size = vec->size;
106 vec = isl_vec_extend(vec, old_size + extra);
107 vec = isl_vec_cow(vec);
108 if (!vec)
112 isl_int_set(vec->el[i + extra], vec->el[i]);
118 isl_int_swap(vec->el[pos + i],
119 vec->el[pos + j]);
122 isl_int_set_si(vec->el[pos + i], 0);
126 return vec;
133 isl_vec *vec;
135 vec = isl_vec_alloc(ctx, size);
136 if (!vec)
138 isl_seq_clr(vec->el, size);
139 return vec;
142 __isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size)
146 if (!vec)
148 if (size <= vec->size)
149 return vec;
151 vec = isl_vec_cow(vec);
152 if (!vec)
155 extra = size - vec->size;
156 vec = isl_vec_extend(vec, size);
157 if (!vec)
160 isl_seq_clr(vec->el + size - extra, extra);
162 return vec;
198 __isl_give isl_vec *isl_vec_copy(__isl_keep isl_vec *vec)
200 if (!vec)
203 vec->ref++;
204 return vec;
207 __isl_give isl_vec *isl_vec_dup(__isl_keep isl_vec *vec)
211 if (!vec)
213 vec2 = isl_vec_alloc(vec->ctx, vec->size);
216 isl_seq_cpy(vec2->el, vec->el, vec->size);
220 __isl_give isl_vec *isl_vec_cow(__isl_take isl_vec *vec)
223 if (!vec)
226 if (vec->ref == 1)
227 return vec;
229 vec2 = isl_vec_dup(vec);
230 isl_vec_free(vec);
234 __isl_null isl_vec *isl_vec_free(__isl_take isl_vec *vec)
236 if (!vec)
239 if (--vec->ref > 0)
242 isl_ctx_deref(vec->ctx);
243 isl_blk_free(vec->ctx, vec->block);
244 free(vec);
249 isl_size isl_vec_size(__isl_keep isl_vec *vec)
251 return vec ? vec->size : isl_size_error;
254 /* Extract the element at position "pos" of "vec".
256 __isl_give isl_val *isl_vec_get_element_val(__isl_keep isl_vec *vec, int pos)
260 if (!vec)
262 ctx = isl_vec_get_ctx(vec);
263 if (pos < 0 || pos >= vec->size)
266 return isl_val_int_from_isl_int(ctx, vec->el[pos]);
269 __isl_give isl_vec *isl_vec_set_element(__isl_take isl_vec *vec,
272 vec = isl_vec_cow(vec);
273 if (!vec)
275 if (pos < 0 || pos >= vec->size)
276 isl_die(vec->ctx, isl_error_invalid, "position out of range",
278 isl_int_set(vec->el[pos], v);
279 return vec;
281 isl_vec_free(vec);
285 __isl_give isl_vec *isl_vec_set_element_si(__isl_take isl_vec *vec,
288 vec = isl_vec_cow(vec);
289 if (!vec)
291 if (pos < 0 || pos >= vec->size)
292 isl_die(vec->ctx, isl_error_invalid, "position out of range",
294 isl_int_set_si(vec->el[pos], v);
295 return vec;
297 isl_vec_free(vec);
301 /* Replace the element at position "pos" of "vec" by "v".
303 __isl_give isl_vec *isl_vec_set_element_val(__isl_take isl_vec *vec,
307 return isl_vec_free(vec);
311 vec = isl_vec_set_element(vec, pos, v->n);
313 return vec;
316 return isl_vec_free(vec);
332 /* Does "vec" contain only zero elements?
334 isl_bool isl_vec_is_zero(__isl_keep isl_vec *vec)
336 if (!vec)
338 return isl_bool_ok(isl_seq_first_non_zero(vec->el, vec->size) < 0);
353 __isl_keep isl_vec *vec)
357 if (!printer || !vec)
361 for (i = 0; i < vec->size; ++i) {
364 printer = isl_printer_print_isl_int(printer, vec->el[i]);
374 void isl_vec_dump(__isl_keep isl_vec *vec)
378 if (!vec)
381 printer = isl_printer_to_file(vec->ctx, stderr);
382 printer = isl_printer_print_vec(printer, vec);
388 __isl_give isl_vec *isl_vec_set(__isl_take isl_vec *vec, isl_int v)
390 vec = isl_vec_cow(vec);
391 if (!vec)
393 isl_seq_set(vec->el, v, vec->size);
394 return vec;
397 __isl_give isl_vec *isl_vec_set_si(__isl_take isl_vec *vec, int v)
399 vec = isl_vec_cow(vec);
400 if (!vec)
402 isl_seq_set_si(vec->el, v, vec->size);
403 return vec;
406 /* Replace all elements of "vec" by "v".
408 __isl_give isl_vec *isl_vec_set_val(__isl_take isl_vec *vec,
411 vec = isl_vec_cow(vec);
412 if (!vec || !v)
417 isl_seq_set(vec->el, v->n, vec->size);
419 return vec;
421 isl_vec_free(vec);
426 __isl_give isl_vec *isl_vec_clr(__isl_take isl_vec *vec)
428 vec = isl_vec_cow(vec);
429 if (!vec)
431 isl_seq_clr(vec->el, vec->size);
432 return vec;
435 void isl_vec_lcm(__isl_keep isl_vec *vec, isl_int *lcm)
437 isl_seq_lcm(vec->block.data, vec->size, lcm);
443 __isl_give isl_vec *isl_vec_ceil(__isl_take isl_vec *vec)
445 vec = isl_vec_cow(vec);
446 if (!vec)
449 isl_seq_cdiv_q(vec->el + 1, vec->el + 1, vec->el[0], vec->size - 1);
451 isl_int_set_si(vec->el[0], 1);
453 return vec;
456 __isl_give isl_vec *isl_vec_normalize(__isl_take isl_vec *vec)
458 if (!vec)
460 isl_seq_normalize(vec->ctx, vec->el, vec->size);
461 return vec;
464 __isl_give isl_vec *isl_vec_neg(__isl_take isl_vec *vec)
466 vec = isl_vec_cow(vec);
467 if (!vec)
469 isl_seq_neg(vec->el, vec->el, vec->size);
470 return vec;
473 __isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m)
476 return vec;
477 vec = isl_vec_cow(vec);
478 if (!vec)
480 isl_seq_scale(vec->el, vec->el, m, vec->size);
481 return vec;
484 /* Reduce the elements of "vec" modulo "m".
486 __isl_give isl_vec *isl_vec_fdiv_r(__isl_take isl_vec *vec, isl_int m)
488 vec = isl_vec_cow(vec);
489 if (!vec)
492 isl_seq_fdiv_r(vec->el, vec->el, m, vec->size);
494 return vec;
525 __isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec)
527 if (!vec)
530 qsort(vec->el, vec->size, sizeof(*vec->el), &qsort_int_cmp);
532 return vec;
535 __isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec,
539 return vec;
540 vec = isl_vec_cow(vec);
541 if (!vec)
544 if (pos + n > vec->size)
545 isl_die(vec->ctx, isl_error_invalid,
548 if (pos + n != vec->size)
549 isl_seq_cpy(vec->el + pos, vec->el + pos + n,
550 vec->size - pos - n);
552 vec->size -= n;
554 return vec;
556 isl_vec_free(vec);
560 __isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec,
566 return vec;
567 if (!vec)
570 if (pos > vec->size)
571 isl_die(vec->ctx, isl_error_invalid,
574 ext = isl_vec_alloc(vec->ctx, vec->size + n);
578 isl_seq_cpy(ext->el, vec->el, pos);
579 isl_seq_cpy(ext->el + pos + n, vec->el + pos, vec->size - pos);
581 isl_vec_free(vec);
584 isl_vec_free(vec);
589 /* Add "n" elements at the end of "vec".
591 __isl_give isl_vec *isl_vec_add_els(__isl_take isl_vec *vec, unsigned n)
593 if (!vec)
595 return isl_vec_insert_els(vec, vec->size, n);
598 __isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec,
601 vec = isl_vec_insert_els(vec, pos, n);
602 if (!vec)
605 isl_seq_clr(vec->el + pos, n);
607 return vec;
610 /* Move the "n" elements starting as "src_pos" of "vec"
615 __isl_give isl_vec *isl_vec_move_els(__isl_take isl_vec *vec,
620 if (!vec)
623 if (src_pos + n > vec->size)
624 isl_die(vec->ctx, isl_error_invalid,
625 "source range out of bounds", return isl_vec_free(vec));
626 if (dst_pos + n > vec->size)
627 isl_die(vec->ctx, isl_error_invalid,
629 return isl_vec_free(vec));
632 return vec;
634 res = isl_vec_alloc(vec->ctx, vec->size);
636 return isl_vec_free(vec);
639 isl_seq_cpy(res->el, vec->el, dst_pos);
640 isl_seq_cpy(res->el + dst_pos, vec->el + src_pos, n);
642 vec->el + dst_pos, src_pos - dst_pos);
644 vec->el + src_pos + n, res->size - src_pos - n);
646 isl_seq_cpy(res->el, vec->el, src_pos);
648 vec->el + src_pos + n, dst_pos - src_pos);
649 isl_seq_cpy(res->el + dst_pos, vec->el + src_pos, n);
651 vec->el + dst_pos + n, res->size - dst_pos - n);
654 isl_vec_free(vec);
658 /* Reorder the elements of "vec" starting at "offset" based
661 __isl_give isl_vec *isl_vec_reorder(__isl_take isl_vec *vec,
667 if (!vec || !r)
670 res = isl_vec_alloc(vec->ctx, offset + r->dst_len);
673 isl_seq_cpy(res->el, vec->el, offset);
676 isl_int_set(res->el[offset + r->pos[i]], vec->el[offset + i]);
679 isl_vec_free(vec);
682 isl_vec_free(vec);