1use super::{Context, Error, LibISLError, Mat, Val};
5use libc::uintptr_t;
6
7pub struct Vec {
9 pub ptr: uintptr_t,
10 pub should_free_on_drop: bool,
11}
12
13extern "C" {
14
15 fn isl_vec_add(vec1: uintptr_t, vec2: uintptr_t) -> uintptr_t;
16
17 fn isl_vec_add_els(vec: uintptr_t, n: u32) -> uintptr_t;
18
19 fn isl_vec_alloc(ctx: uintptr_t, size: u32) -> uintptr_t;
20
21 fn isl_vec_ceil(vec: uintptr_t) -> uintptr_t;
22
23 fn isl_vec_clr(vec: uintptr_t) -> uintptr_t;
24
25 fn isl_vec_cmp_element(vec1: uintptr_t, vec2: uintptr_t, pos: i32) -> i32;
26
27 fn isl_vec_concat(vec1: uintptr_t, vec2: uintptr_t) -> uintptr_t;
28
29 fn isl_vec_copy(vec: uintptr_t) -> uintptr_t;
30
31 fn isl_vec_drop_els(vec: uintptr_t, pos: u32, n: u32) -> uintptr_t;
32
33 fn isl_vec_dump(vec: uintptr_t) -> ();
34
35 fn isl_vec_extend(vec: uintptr_t, size: u32) -> uintptr_t;
36
37 fn isl_vec_free(vec: uintptr_t) -> uintptr_t;
38
39 fn isl_vec_get_ctx(vec: uintptr_t) -> uintptr_t;
40
41 fn isl_vec_get_element_val(vec: uintptr_t, pos: i32) -> uintptr_t;
42
43 fn isl_vec_insert_els(vec: uintptr_t, pos: u32, n: u32) -> uintptr_t;
44
45 fn isl_vec_insert_zero_els(vec: uintptr_t, pos: u32, n: u32) -> uintptr_t;
46
47 fn isl_vec_is_equal(vec1: uintptr_t, vec2: uintptr_t) -> i32;
48
49 fn isl_vec_mat_product(vec: uintptr_t, mat: uintptr_t) -> uintptr_t;
50
51 fn isl_vec_move_els(vec: uintptr_t, dst_col: u32, src_col: u32, n: u32) -> uintptr_t;
52
53 fn isl_vec_neg(vec: uintptr_t) -> uintptr_t;
54
55 fn isl_vec_normalize(vec: uintptr_t) -> uintptr_t;
56
57 fn isl_vec_set_element_si(vec: uintptr_t, pos: i32, v: i32) -> uintptr_t;
58
59 fn isl_vec_set_element_val(vec: uintptr_t, pos: i32, v: uintptr_t) -> uintptr_t;
60
61 fn isl_vec_set_si(vec: uintptr_t, v: i32) -> uintptr_t;
62
63 fn isl_vec_set_val(vec: uintptr_t, v: uintptr_t) -> uintptr_t;
64
65 fn isl_vec_size(vec: uintptr_t) -> i32;
66
67 fn isl_vec_sort(vec: uintptr_t) -> uintptr_t;
68
69 fn isl_vec_zero(ctx: uintptr_t, size: u32) -> uintptr_t;
70
71 fn isl_vec_zero_extend(vec: uintptr_t, size: u32) -> uintptr_t;
72
73}
74
75impl Vec {
76 pub fn add(self, vec2: Vec) -> Result<Vec, LibISLError> {
78 let vec1 = self;
79 let isl_rs_ctx = vec1.get_ctx();
80 let mut vec1 = vec1;
81 vec1.do_not_free_on_drop();
82 let vec1 = vec1.ptr;
83 let mut vec2 = vec2;
84 vec2.do_not_free_on_drop();
85 let vec2 = vec2.ptr;
86 let isl_rs_result = unsafe { isl_vec_add(vec1, vec2) };
87 let isl_rs_result = Vec { ptr: isl_rs_result,
88 should_free_on_drop: true };
89 let err = isl_rs_ctx.last_error();
90 if err != Error::None_ {
91 let err_msg = isl_rs_ctx.last_error_msg();
92 isl_rs_ctx.reset_error();
93 return Err(LibISLError::new(err, err_msg));
94 }
95 Ok(isl_rs_result)
96 }
97
98 pub fn add_els(self, n: u32) -> Result<Vec, LibISLError> {
100 let vec = self;
101 let isl_rs_ctx = vec.get_ctx();
102 let mut vec = vec;
103 vec.do_not_free_on_drop();
104 let vec = vec.ptr;
105 let isl_rs_result = unsafe { isl_vec_add_els(vec, n) };
106 let isl_rs_result = Vec { ptr: isl_rs_result,
107 should_free_on_drop: true };
108 let err = isl_rs_ctx.last_error();
109 if err != Error::None_ {
110 let err_msg = isl_rs_ctx.last_error_msg();
111 isl_rs_ctx.reset_error();
112 return Err(LibISLError::new(err, err_msg));
113 }
114 Ok(isl_rs_result)
115 }
116
117 pub fn alloc(ctx: &Context, size: u32) -> Result<Vec, LibISLError> {
119 let isl_rs_ctx = Context { ptr: ctx.ptr,
120 should_free_on_drop: false };
121 let ctx = ctx.ptr;
122 let isl_rs_result = unsafe { isl_vec_alloc(ctx, size) };
123 let isl_rs_result = Vec { ptr: isl_rs_result,
124 should_free_on_drop: true };
125 let err = isl_rs_ctx.last_error();
126 if err != Error::None_ {
127 let err_msg = isl_rs_ctx.last_error_msg();
128 isl_rs_ctx.reset_error();
129 return Err(LibISLError::new(err, err_msg));
130 }
131 Ok(isl_rs_result)
132 }
133
134 pub fn ceil(self) -> Result<Vec, LibISLError> {
136 let vec = self;
137 let isl_rs_ctx = vec.get_ctx();
138 let mut vec = vec;
139 vec.do_not_free_on_drop();
140 let vec = vec.ptr;
141 let isl_rs_result = unsafe { isl_vec_ceil(vec) };
142 let isl_rs_result = Vec { ptr: isl_rs_result,
143 should_free_on_drop: true };
144 let err = isl_rs_ctx.last_error();
145 if err != Error::None_ {
146 let err_msg = isl_rs_ctx.last_error_msg();
147 isl_rs_ctx.reset_error();
148 return Err(LibISLError::new(err, err_msg));
149 }
150 Ok(isl_rs_result)
151 }
152
153 pub fn clr(self) -> Result<Vec, LibISLError> {
155 let vec = self;
156 let isl_rs_ctx = vec.get_ctx();
157 let mut vec = vec;
158 vec.do_not_free_on_drop();
159 let vec = vec.ptr;
160 let isl_rs_result = unsafe { isl_vec_clr(vec) };
161 let isl_rs_result = Vec { ptr: isl_rs_result,
162 should_free_on_drop: true };
163 let err = isl_rs_ctx.last_error();
164 if err != Error::None_ {
165 let err_msg = isl_rs_ctx.last_error_msg();
166 isl_rs_ctx.reset_error();
167 return Err(LibISLError::new(err, err_msg));
168 }
169 Ok(isl_rs_result)
170 }
171
172 pub fn cmp_element(&self, vec2: &Vec, pos: i32) -> Result<i32, LibISLError> {
174 let vec1 = self;
175 let isl_rs_ctx = vec1.get_ctx();
176 let vec1 = vec1.ptr;
177 let vec2 = vec2.ptr;
178 let isl_rs_result = unsafe { isl_vec_cmp_element(vec1, vec2, pos) };
179 let err = isl_rs_ctx.last_error();
180 if err != Error::None_ {
181 let err_msg = isl_rs_ctx.last_error_msg();
182 isl_rs_ctx.reset_error();
183 return Err(LibISLError::new(err, err_msg));
184 }
185 Ok(isl_rs_result)
186 }
187
188 pub fn concat(self, vec2: Vec) -> Result<Vec, LibISLError> {
190 let vec1 = self;
191 let isl_rs_ctx = vec1.get_ctx();
192 let mut vec1 = vec1;
193 vec1.do_not_free_on_drop();
194 let vec1 = vec1.ptr;
195 let mut vec2 = vec2;
196 vec2.do_not_free_on_drop();
197 let vec2 = vec2.ptr;
198 let isl_rs_result = unsafe { isl_vec_concat(vec1, vec2) };
199 let isl_rs_result = Vec { ptr: isl_rs_result,
200 should_free_on_drop: true };
201 let err = isl_rs_ctx.last_error();
202 if err != Error::None_ {
203 let err_msg = isl_rs_ctx.last_error_msg();
204 isl_rs_ctx.reset_error();
205 return Err(LibISLError::new(err, err_msg));
206 }
207 Ok(isl_rs_result)
208 }
209
210 pub fn copy(&self) -> Result<Vec, LibISLError> {
212 let vec = self;
213 let isl_rs_ctx = vec.get_ctx();
214 let vec = vec.ptr;
215 let isl_rs_result = unsafe { isl_vec_copy(vec) };
216 let isl_rs_result = Vec { ptr: isl_rs_result,
217 should_free_on_drop: true };
218 let err = isl_rs_ctx.last_error();
219 if err != Error::None_ {
220 let err_msg = isl_rs_ctx.last_error_msg();
221 isl_rs_ctx.reset_error();
222 return Err(LibISLError::new(err, err_msg));
223 }
224 Ok(isl_rs_result)
225 }
226
227 pub fn drop_els(self, pos: u32, n: u32) -> Result<Vec, LibISLError> {
229 let vec = self;
230 let isl_rs_ctx = vec.get_ctx();
231 let mut vec = vec;
232 vec.do_not_free_on_drop();
233 let vec = vec.ptr;
234 let isl_rs_result = unsafe { isl_vec_drop_els(vec, pos, n) };
235 let isl_rs_result = Vec { ptr: isl_rs_result,
236 should_free_on_drop: true };
237 let err = isl_rs_ctx.last_error();
238 if err != Error::None_ {
239 let err_msg = isl_rs_ctx.last_error_msg();
240 isl_rs_ctx.reset_error();
241 return Err(LibISLError::new(err, err_msg));
242 }
243 Ok(isl_rs_result)
244 }
245
246 pub fn dump(&self) -> Result<(), LibISLError> {
248 let vec = self;
249 let isl_rs_ctx = vec.get_ctx();
250 let vec = vec.ptr;
251 let isl_rs_result = unsafe { isl_vec_dump(vec) };
252 let err = isl_rs_ctx.last_error();
253 if err != Error::None_ {
254 let err_msg = isl_rs_ctx.last_error_msg();
255 isl_rs_ctx.reset_error();
256 return Err(LibISLError::new(err, err_msg));
257 }
258 Ok(isl_rs_result)
259 }
260
261 pub fn extend(self, size: u32) -> Result<Vec, LibISLError> {
263 let vec = self;
264 let isl_rs_ctx = vec.get_ctx();
265 let mut vec = vec;
266 vec.do_not_free_on_drop();
267 let vec = vec.ptr;
268 let isl_rs_result = unsafe { isl_vec_extend(vec, size) };
269 let isl_rs_result = Vec { ptr: isl_rs_result,
270 should_free_on_drop: true };
271 let err = isl_rs_ctx.last_error();
272 if err != Error::None_ {
273 let err_msg = isl_rs_ctx.last_error_msg();
274 isl_rs_ctx.reset_error();
275 return Err(LibISLError::new(err, err_msg));
276 }
277 Ok(isl_rs_result)
278 }
279
280 pub fn free(self) -> Result<Vec, LibISLError> {
282 let vec = self;
283 let isl_rs_ctx = vec.get_ctx();
284 let mut vec = vec;
285 vec.do_not_free_on_drop();
286 let vec = vec.ptr;
287 let isl_rs_result = unsafe { isl_vec_free(vec) };
288 let isl_rs_result = Vec { ptr: isl_rs_result,
289 should_free_on_drop: true };
290 let err = isl_rs_ctx.last_error();
291 if err != Error::None_ {
292 let err_msg = isl_rs_ctx.last_error_msg();
293 isl_rs_ctx.reset_error();
294 return Err(LibISLError::new(err, err_msg));
295 }
296 Ok(isl_rs_result)
297 }
298
299 pub fn get_ctx(&self) -> Context {
301 let vec = self;
302 let vec = vec.ptr;
303 let isl_rs_result = unsafe { isl_vec_get_ctx(vec) };
304 let isl_rs_result = Context { ptr: isl_rs_result,
305 should_free_on_drop: false };
306 isl_rs_result
307 }
308
309 pub fn get_element_val(&self, pos: i32) -> Result<Val, LibISLError> {
311 let vec = self;
312 let isl_rs_ctx = vec.get_ctx();
313 let vec = vec.ptr;
314 let isl_rs_result = unsafe { isl_vec_get_element_val(vec, pos) };
315 let isl_rs_result = Val { ptr: isl_rs_result,
316 should_free_on_drop: true };
317 let err = isl_rs_ctx.last_error();
318 if err != Error::None_ {
319 let err_msg = isl_rs_ctx.last_error_msg();
320 isl_rs_ctx.reset_error();
321 return Err(LibISLError::new(err, err_msg));
322 }
323 Ok(isl_rs_result)
324 }
325
326 pub fn insert_els(self, pos: u32, n: u32) -> Result<Vec, LibISLError> {
328 let vec = self;
329 let isl_rs_ctx = vec.get_ctx();
330 let mut vec = vec;
331 vec.do_not_free_on_drop();
332 let vec = vec.ptr;
333 let isl_rs_result = unsafe { isl_vec_insert_els(vec, pos, n) };
334 let isl_rs_result = Vec { ptr: isl_rs_result,
335 should_free_on_drop: true };
336 let err = isl_rs_ctx.last_error();
337 if err != Error::None_ {
338 let err_msg = isl_rs_ctx.last_error_msg();
339 isl_rs_ctx.reset_error();
340 return Err(LibISLError::new(err, err_msg));
341 }
342 Ok(isl_rs_result)
343 }
344
345 pub fn insert_zero_els(self, pos: u32, n: u32) -> Result<Vec, LibISLError> {
347 let vec = self;
348 let isl_rs_ctx = vec.get_ctx();
349 let mut vec = vec;
350 vec.do_not_free_on_drop();
351 let vec = vec.ptr;
352 let isl_rs_result = unsafe { isl_vec_insert_zero_els(vec, pos, n) };
353 let isl_rs_result = Vec { ptr: isl_rs_result,
354 should_free_on_drop: true };
355 let err = isl_rs_ctx.last_error();
356 if err != Error::None_ {
357 let err_msg = isl_rs_ctx.last_error_msg();
358 isl_rs_ctx.reset_error();
359 return Err(LibISLError::new(err, err_msg));
360 }
361 Ok(isl_rs_result)
362 }
363
364 pub fn is_equal(&self, vec2: &Vec) -> Result<bool, LibISLError> {
366 let vec1 = self;
367 let isl_rs_ctx = vec1.get_ctx();
368 let vec1 = vec1.ptr;
369 let vec2 = vec2.ptr;
370 let isl_rs_result = unsafe { isl_vec_is_equal(vec1, vec2) };
371 let isl_rs_result = match isl_rs_result {
372 0 => false,
373 1 => true,
374 _ => {
375 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
376 }
377 };
378 let err = isl_rs_ctx.last_error();
379 if err != Error::None_ {
380 let err_msg = isl_rs_ctx.last_error_msg();
381 isl_rs_ctx.reset_error();
382 return Err(LibISLError::new(err, err_msg));
383 }
384 Ok(isl_rs_result)
385 }
386
387 pub fn mat_product(self, mat: Mat) -> Result<Vec, LibISLError> {
389 let vec = self;
390 let isl_rs_ctx = vec.get_ctx();
391 let mut vec = vec;
392 vec.do_not_free_on_drop();
393 let vec = vec.ptr;
394 let mut mat = mat;
395 mat.do_not_free_on_drop();
396 let mat = mat.ptr;
397 let isl_rs_result = unsafe { isl_vec_mat_product(vec, mat) };
398 let isl_rs_result = Vec { ptr: isl_rs_result,
399 should_free_on_drop: true };
400 let err = isl_rs_ctx.last_error();
401 if err != Error::None_ {
402 let err_msg = isl_rs_ctx.last_error_msg();
403 isl_rs_ctx.reset_error();
404 return Err(LibISLError::new(err, err_msg));
405 }
406 Ok(isl_rs_result)
407 }
408
409 pub fn move_els(self, dst_col: u32, src_col: u32, n: u32) -> Result<Vec, LibISLError> {
411 let vec = self;
412 let isl_rs_ctx = vec.get_ctx();
413 let mut vec = vec;
414 vec.do_not_free_on_drop();
415 let vec = vec.ptr;
416 let isl_rs_result = unsafe { isl_vec_move_els(vec, dst_col, src_col, n) };
417 let isl_rs_result = Vec { ptr: isl_rs_result,
418 should_free_on_drop: true };
419 let err = isl_rs_ctx.last_error();
420 if err != Error::None_ {
421 let err_msg = isl_rs_ctx.last_error_msg();
422 isl_rs_ctx.reset_error();
423 return Err(LibISLError::new(err, err_msg));
424 }
425 Ok(isl_rs_result)
426 }
427
428 pub fn neg(self) -> Result<Vec, LibISLError> {
430 let vec = self;
431 let isl_rs_ctx = vec.get_ctx();
432 let mut vec = vec;
433 vec.do_not_free_on_drop();
434 let vec = vec.ptr;
435 let isl_rs_result = unsafe { isl_vec_neg(vec) };
436 let isl_rs_result = Vec { ptr: isl_rs_result,
437 should_free_on_drop: true };
438 let err = isl_rs_ctx.last_error();
439 if err != Error::None_ {
440 let err_msg = isl_rs_ctx.last_error_msg();
441 isl_rs_ctx.reset_error();
442 return Err(LibISLError::new(err, err_msg));
443 }
444 Ok(isl_rs_result)
445 }
446
447 pub fn normalize(self) -> Result<Vec, LibISLError> {
449 let vec = self;
450 let isl_rs_ctx = vec.get_ctx();
451 let mut vec = vec;
452 vec.do_not_free_on_drop();
453 let vec = vec.ptr;
454 let isl_rs_result = unsafe { isl_vec_normalize(vec) };
455 let isl_rs_result = Vec { ptr: isl_rs_result,
456 should_free_on_drop: true };
457 let err = isl_rs_ctx.last_error();
458 if err != Error::None_ {
459 let err_msg = isl_rs_ctx.last_error_msg();
460 isl_rs_ctx.reset_error();
461 return Err(LibISLError::new(err, err_msg));
462 }
463 Ok(isl_rs_result)
464 }
465
466 pub fn set_element_si(self, pos: i32, v: i32) -> Result<Vec, LibISLError> {
468 let vec = self;
469 let isl_rs_ctx = vec.get_ctx();
470 let mut vec = vec;
471 vec.do_not_free_on_drop();
472 let vec = vec.ptr;
473 let isl_rs_result = unsafe { isl_vec_set_element_si(vec, pos, v) };
474 let isl_rs_result = Vec { ptr: isl_rs_result,
475 should_free_on_drop: true };
476 let err = isl_rs_ctx.last_error();
477 if err != Error::None_ {
478 let err_msg = isl_rs_ctx.last_error_msg();
479 isl_rs_ctx.reset_error();
480 return Err(LibISLError::new(err, err_msg));
481 }
482 Ok(isl_rs_result)
483 }
484
485 pub fn set_element_val(self, pos: i32, v: Val) -> Result<Vec, LibISLError> {
487 let vec = self;
488 let isl_rs_ctx = vec.get_ctx();
489 let mut vec = vec;
490 vec.do_not_free_on_drop();
491 let vec = vec.ptr;
492 let mut v = v;
493 v.do_not_free_on_drop();
494 let v = v.ptr;
495 let isl_rs_result = unsafe { isl_vec_set_element_val(vec, pos, v) };
496 let isl_rs_result = Vec { ptr: isl_rs_result,
497 should_free_on_drop: true };
498 let err = isl_rs_ctx.last_error();
499 if err != Error::None_ {
500 let err_msg = isl_rs_ctx.last_error_msg();
501 isl_rs_ctx.reset_error();
502 return Err(LibISLError::new(err, err_msg));
503 }
504 Ok(isl_rs_result)
505 }
506
507 pub fn set_si(self, v: i32) -> Result<Vec, LibISLError> {
509 let vec = self;
510 let isl_rs_ctx = vec.get_ctx();
511 let mut vec = vec;
512 vec.do_not_free_on_drop();
513 let vec = vec.ptr;
514 let isl_rs_result = unsafe { isl_vec_set_si(vec, v) };
515 let isl_rs_result = Vec { ptr: isl_rs_result,
516 should_free_on_drop: true };
517 let err = isl_rs_ctx.last_error();
518 if err != Error::None_ {
519 let err_msg = isl_rs_ctx.last_error_msg();
520 isl_rs_ctx.reset_error();
521 return Err(LibISLError::new(err, err_msg));
522 }
523 Ok(isl_rs_result)
524 }
525
526 pub fn set_val(self, v: Val) -> Result<Vec, LibISLError> {
528 let vec = self;
529 let isl_rs_ctx = vec.get_ctx();
530 let mut vec = vec;
531 vec.do_not_free_on_drop();
532 let vec = vec.ptr;
533 let mut v = v;
534 v.do_not_free_on_drop();
535 let v = v.ptr;
536 let isl_rs_result = unsafe { isl_vec_set_val(vec, v) };
537 let isl_rs_result = Vec { ptr: isl_rs_result,
538 should_free_on_drop: true };
539 let err = isl_rs_ctx.last_error();
540 if err != Error::None_ {
541 let err_msg = isl_rs_ctx.last_error_msg();
542 isl_rs_ctx.reset_error();
543 return Err(LibISLError::new(err, err_msg));
544 }
545 Ok(isl_rs_result)
546 }
547
548 pub fn size(&self) -> Result<i32, LibISLError> {
550 let vec = self;
551 let isl_rs_ctx = vec.get_ctx();
552 let vec = vec.ptr;
553 let isl_rs_result = unsafe { isl_vec_size(vec) };
554 let err = isl_rs_ctx.last_error();
555 if err != Error::None_ {
556 let err_msg = isl_rs_ctx.last_error_msg();
557 isl_rs_ctx.reset_error();
558 return Err(LibISLError::new(err, err_msg));
559 }
560 Ok(isl_rs_result)
561 }
562
563 pub fn sort(self) -> Result<Vec, LibISLError> {
565 let vec = self;
566 let isl_rs_ctx = vec.get_ctx();
567 let mut vec = vec;
568 vec.do_not_free_on_drop();
569 let vec = vec.ptr;
570 let isl_rs_result = unsafe { isl_vec_sort(vec) };
571 let isl_rs_result = Vec { ptr: isl_rs_result,
572 should_free_on_drop: true };
573 let err = isl_rs_ctx.last_error();
574 if err != Error::None_ {
575 let err_msg = isl_rs_ctx.last_error_msg();
576 isl_rs_ctx.reset_error();
577 return Err(LibISLError::new(err, err_msg));
578 }
579 Ok(isl_rs_result)
580 }
581
582 pub fn zero(ctx: &Context, size: u32) -> Result<Vec, LibISLError> {
584 let isl_rs_ctx = Context { ptr: ctx.ptr,
585 should_free_on_drop: false };
586 let ctx = ctx.ptr;
587 let isl_rs_result = unsafe { isl_vec_zero(ctx, size) };
588 let isl_rs_result = Vec { ptr: isl_rs_result,
589 should_free_on_drop: true };
590 let err = isl_rs_ctx.last_error();
591 if err != Error::None_ {
592 let err_msg = isl_rs_ctx.last_error_msg();
593 isl_rs_ctx.reset_error();
594 return Err(LibISLError::new(err, err_msg));
595 }
596 Ok(isl_rs_result)
597 }
598
599 pub fn zero_extend(self, size: u32) -> Result<Vec, LibISLError> {
601 let vec = self;
602 let isl_rs_ctx = vec.get_ctx();
603 let mut vec = vec;
604 vec.do_not_free_on_drop();
605 let vec = vec.ptr;
606 let isl_rs_result = unsafe { isl_vec_zero_extend(vec, size) };
607 let isl_rs_result = Vec { ptr: isl_rs_result,
608 should_free_on_drop: true };
609 let err = isl_rs_ctx.last_error();
610 if err != Error::None_ {
611 let err_msg = isl_rs_ctx.last_error_msg();
612 isl_rs_ctx.reset_error();
613 return Err(LibISLError::new(err, err_msg));
614 }
615 Ok(isl_rs_result)
616 }
617
618 pub fn do_not_free_on_drop(&mut self) {
620 self.should_free_on_drop = false;
621 }
622}
623
624impl Drop for Vec {
625 fn drop(&mut self) {
626 if self.should_free_on_drop {
627 unsafe {
628 isl_vec_free(self.ptr);
629 }
630 }
631 }
632}