isl_rs/bindings/
vec.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use crate::bindings::{Context, Val};
5use libc::uintptr_t;
6
7/// Wraps `isl_vec`.
8pub struct Vec {
9    pub ptr: uintptr_t,
10    pub should_free_on_drop: bool,
11}
12
13extern "C" {
14
15    fn isl_vec_alloc(ctx: uintptr_t, size: u32) -> uintptr_t;
16
17    fn isl_vec_zero(ctx: uintptr_t, size: u32) -> uintptr_t;
18
19    fn isl_vec_copy(vec: uintptr_t) -> uintptr_t;
20
21    fn isl_vec_free(vec: uintptr_t) -> uintptr_t;
22
23    fn isl_vec_get_ctx(vec: uintptr_t) -> uintptr_t;
24
25    fn isl_vec_size(vec: uintptr_t) -> i32;
26
27    fn isl_vec_get_element_val(vec: uintptr_t, pos: i32) -> uintptr_t;
28
29    fn isl_vec_set_element_si(vec: uintptr_t, pos: i32, v: i32) -> uintptr_t;
30
31    fn isl_vec_set_element_val(vec: uintptr_t, pos: i32, v: uintptr_t) -> uintptr_t;
32
33    fn isl_vec_is_equal(vec1: uintptr_t, vec2: uintptr_t) -> i32;
34
35    fn isl_vec_cmp_element(vec1: uintptr_t, vec2: uintptr_t, pos: i32) -> i32;
36
37    fn isl_vec_dump(vec: uintptr_t);
38
39    fn isl_vec_ceil(vec: uintptr_t) -> uintptr_t;
40
41    fn isl_vec_normalize(vec: uintptr_t) -> uintptr_t;
42
43    fn isl_vec_set_si(vec: uintptr_t, v: i32) -> uintptr_t;
44
45    fn isl_vec_set_val(vec: uintptr_t, v: uintptr_t) -> uintptr_t;
46
47    fn isl_vec_clr(vec: uintptr_t) -> uintptr_t;
48
49    fn isl_vec_neg(vec: uintptr_t) -> uintptr_t;
50
51    fn isl_vec_add(vec1: uintptr_t, vec2: uintptr_t) -> uintptr_t;
52
53    fn isl_vec_extend(vec: uintptr_t, size: u32) -> uintptr_t;
54
55    fn isl_vec_zero_extend(vec: uintptr_t, size: u32) -> uintptr_t;
56
57    fn isl_vec_concat(vec1: uintptr_t, vec2: uintptr_t) -> uintptr_t;
58
59    fn isl_vec_sort(vec: uintptr_t) -> uintptr_t;
60
61    fn isl_vec_drop_els(vec: uintptr_t, pos: u32, n: u32) -> uintptr_t;
62
63    fn isl_vec_add_els(vec: uintptr_t, n: u32) -> uintptr_t;
64
65    fn isl_vec_insert_els(vec: uintptr_t, pos: u32, n: u32) -> uintptr_t;
66
67    fn isl_vec_insert_zero_els(vec: uintptr_t, pos: u32, n: u32) -> uintptr_t;
68
69    fn isl_vec_move_els(vec: uintptr_t, dst_col: u32, src_col: u32, n: u32) -> uintptr_t;
70
71}
72
73impl Vec {
74    /// Wraps `isl_vec_alloc`.
75    pub fn alloc(ctx: &Context, size: u32) -> Vec {
76        let ctx = ctx.ptr;
77        let isl_rs_result = unsafe { isl_vec_alloc(ctx, size) };
78        let isl_rs_result = Vec { ptr: isl_rs_result,
79                                  should_free_on_drop: true };
80        isl_rs_result
81    }
82
83    /// Wraps `isl_vec_zero`.
84    pub fn zero(ctx: &Context, size: u32) -> Vec {
85        let ctx = ctx.ptr;
86        let isl_rs_result = unsafe { isl_vec_zero(ctx, size) };
87        let isl_rs_result = Vec { ptr: isl_rs_result,
88                                  should_free_on_drop: true };
89        isl_rs_result
90    }
91
92    /// Wraps `isl_vec_copy`.
93    pub fn copy(&self) -> Vec {
94        let vec = self;
95        let vec = vec.ptr;
96        let isl_rs_result = unsafe { isl_vec_copy(vec) };
97        let isl_rs_result = Vec { ptr: isl_rs_result,
98                                  should_free_on_drop: true };
99        isl_rs_result
100    }
101
102    /// Wraps `isl_vec_free`.
103    pub fn free(self) -> Vec {
104        let vec = self;
105        let mut vec = vec;
106        vec.do_not_free_on_drop();
107        let vec = vec.ptr;
108        let isl_rs_result = unsafe { isl_vec_free(vec) };
109        let isl_rs_result = Vec { ptr: isl_rs_result,
110                                  should_free_on_drop: true };
111        isl_rs_result
112    }
113
114    /// Wraps `isl_vec_get_ctx`.
115    pub fn get_ctx(&self) -> Context {
116        let vec = self;
117        let vec = vec.ptr;
118        let isl_rs_result = unsafe { isl_vec_get_ctx(vec) };
119        let isl_rs_result = Context { ptr: isl_rs_result,
120                                      should_free_on_drop: true };
121        let mut isl_rs_result = isl_rs_result;
122        isl_rs_result.do_not_free_on_drop();
123        isl_rs_result
124    }
125
126    /// Wraps `isl_vec_size`.
127    pub fn size(&self) -> i32 {
128        let vec = self;
129        let vec = vec.ptr;
130        let isl_rs_result = unsafe { isl_vec_size(vec) };
131        isl_rs_result
132    }
133
134    /// Wraps `isl_vec_get_element_val`.
135    pub fn get_element_val(&self, pos: i32) -> Val {
136        let vec = self;
137        let vec = vec.ptr;
138        let isl_rs_result = unsafe { isl_vec_get_element_val(vec, pos) };
139        let isl_rs_result = Val { ptr: isl_rs_result,
140                                  should_free_on_drop: true };
141        isl_rs_result
142    }
143
144    /// Wraps `isl_vec_set_element_si`.
145    pub fn set_element_si(self, pos: i32, v: i32) -> Vec {
146        let vec = self;
147        let mut vec = vec;
148        vec.do_not_free_on_drop();
149        let vec = vec.ptr;
150        let isl_rs_result = unsafe { isl_vec_set_element_si(vec, pos, v) };
151        let isl_rs_result = Vec { ptr: isl_rs_result,
152                                  should_free_on_drop: true };
153        isl_rs_result
154    }
155
156    /// Wraps `isl_vec_set_element_val`.
157    pub fn set_element_val(self, pos: i32, v: Val) -> Vec {
158        let vec = self;
159        let mut vec = vec;
160        vec.do_not_free_on_drop();
161        let vec = vec.ptr;
162        let mut v = v;
163        v.do_not_free_on_drop();
164        let v = v.ptr;
165        let isl_rs_result = unsafe { isl_vec_set_element_val(vec, pos, v) };
166        let isl_rs_result = Vec { ptr: isl_rs_result,
167                                  should_free_on_drop: true };
168        isl_rs_result
169    }
170
171    /// Wraps `isl_vec_is_equal`.
172    pub fn is_equal(&self, vec2: &Vec) -> bool {
173        let vec1 = self;
174        let vec1 = vec1.ptr;
175        let vec2 = vec2.ptr;
176        let isl_rs_result = unsafe { isl_vec_is_equal(vec1, vec2) };
177        let isl_rs_result = match isl_rs_result {
178            0 => false,
179            1 => true,
180            _ => panic!("Got isl_bool = -1"),
181        };
182        isl_rs_result
183    }
184
185    /// Wraps `isl_vec_cmp_element`.
186    pub fn cmp_element(&self, vec2: &Vec, pos: i32) -> i32 {
187        let vec1 = self;
188        let vec1 = vec1.ptr;
189        let vec2 = vec2.ptr;
190        let isl_rs_result = unsafe { isl_vec_cmp_element(vec1, vec2, pos) };
191        isl_rs_result
192    }
193
194    /// Wraps `isl_vec_dump`.
195    pub fn dump(&self) {
196        let vec = self;
197        let vec = vec.ptr;
198        let isl_rs_result = unsafe { isl_vec_dump(vec) };
199        isl_rs_result
200    }
201
202    /// Wraps `isl_vec_ceil`.
203    pub fn ceil(self) -> Vec {
204        let vec = self;
205        let mut vec = vec;
206        vec.do_not_free_on_drop();
207        let vec = vec.ptr;
208        let isl_rs_result = unsafe { isl_vec_ceil(vec) };
209        let isl_rs_result = Vec { ptr: isl_rs_result,
210                                  should_free_on_drop: true };
211        isl_rs_result
212    }
213
214    /// Wraps `isl_vec_normalize`.
215    pub fn normalize(self) -> Vec {
216        let vec = self;
217        let mut vec = vec;
218        vec.do_not_free_on_drop();
219        let vec = vec.ptr;
220        let isl_rs_result = unsafe { isl_vec_normalize(vec) };
221        let isl_rs_result = Vec { ptr: isl_rs_result,
222                                  should_free_on_drop: true };
223        isl_rs_result
224    }
225
226    /// Wraps `isl_vec_set_si`.
227    pub fn set_si(self, v: i32) -> Vec {
228        let vec = self;
229        let mut vec = vec;
230        vec.do_not_free_on_drop();
231        let vec = vec.ptr;
232        let isl_rs_result = unsafe { isl_vec_set_si(vec, v) };
233        let isl_rs_result = Vec { ptr: isl_rs_result,
234                                  should_free_on_drop: true };
235        isl_rs_result
236    }
237
238    /// Wraps `isl_vec_set_val`.
239    pub fn set_val(self, v: Val) -> Vec {
240        let vec = self;
241        let mut vec = vec;
242        vec.do_not_free_on_drop();
243        let vec = vec.ptr;
244        let mut v = v;
245        v.do_not_free_on_drop();
246        let v = v.ptr;
247        let isl_rs_result = unsafe { isl_vec_set_val(vec, v) };
248        let isl_rs_result = Vec { ptr: isl_rs_result,
249                                  should_free_on_drop: true };
250        isl_rs_result
251    }
252
253    /// Wraps `isl_vec_clr`.
254    pub fn clr(self) -> Vec {
255        let vec = self;
256        let mut vec = vec;
257        vec.do_not_free_on_drop();
258        let vec = vec.ptr;
259        let isl_rs_result = unsafe { isl_vec_clr(vec) };
260        let isl_rs_result = Vec { ptr: isl_rs_result,
261                                  should_free_on_drop: true };
262        isl_rs_result
263    }
264
265    /// Wraps `isl_vec_neg`.
266    pub fn neg(self) -> Vec {
267        let vec = self;
268        let mut vec = vec;
269        vec.do_not_free_on_drop();
270        let vec = vec.ptr;
271        let isl_rs_result = unsafe { isl_vec_neg(vec) };
272        let isl_rs_result = Vec { ptr: isl_rs_result,
273                                  should_free_on_drop: true };
274        isl_rs_result
275    }
276
277    /// Wraps `isl_vec_add`.
278    pub fn add(self, vec2: Vec) -> Vec {
279        let vec1 = self;
280        let mut vec1 = vec1;
281        vec1.do_not_free_on_drop();
282        let vec1 = vec1.ptr;
283        let mut vec2 = vec2;
284        vec2.do_not_free_on_drop();
285        let vec2 = vec2.ptr;
286        let isl_rs_result = unsafe { isl_vec_add(vec1, vec2) };
287        let isl_rs_result = Vec { ptr: isl_rs_result,
288                                  should_free_on_drop: true };
289        isl_rs_result
290    }
291
292    /// Wraps `isl_vec_extend`.
293    pub fn extend(self, size: u32) -> Vec {
294        let vec = self;
295        let mut vec = vec;
296        vec.do_not_free_on_drop();
297        let vec = vec.ptr;
298        let isl_rs_result = unsafe { isl_vec_extend(vec, size) };
299        let isl_rs_result = Vec { ptr: isl_rs_result,
300                                  should_free_on_drop: true };
301        isl_rs_result
302    }
303
304    /// Wraps `isl_vec_zero_extend`.
305    pub fn zero_extend(self, size: u32) -> Vec {
306        let vec = self;
307        let mut vec = vec;
308        vec.do_not_free_on_drop();
309        let vec = vec.ptr;
310        let isl_rs_result = unsafe { isl_vec_zero_extend(vec, size) };
311        let isl_rs_result = Vec { ptr: isl_rs_result,
312                                  should_free_on_drop: true };
313        isl_rs_result
314    }
315
316    /// Wraps `isl_vec_concat`.
317    pub fn concat(self, vec2: Vec) -> Vec {
318        let vec1 = self;
319        let mut vec1 = vec1;
320        vec1.do_not_free_on_drop();
321        let vec1 = vec1.ptr;
322        let mut vec2 = vec2;
323        vec2.do_not_free_on_drop();
324        let vec2 = vec2.ptr;
325        let isl_rs_result = unsafe { isl_vec_concat(vec1, vec2) };
326        let isl_rs_result = Vec { ptr: isl_rs_result,
327                                  should_free_on_drop: true };
328        isl_rs_result
329    }
330
331    /// Wraps `isl_vec_sort`.
332    pub fn sort(self) -> Vec {
333        let vec = self;
334        let mut vec = vec;
335        vec.do_not_free_on_drop();
336        let vec = vec.ptr;
337        let isl_rs_result = unsafe { isl_vec_sort(vec) };
338        let isl_rs_result = Vec { ptr: isl_rs_result,
339                                  should_free_on_drop: true };
340        isl_rs_result
341    }
342
343    /// Wraps `isl_vec_drop_els`.
344    pub fn drop_els(self, pos: u32, n: u32) -> Vec {
345        let vec = self;
346        let mut vec = vec;
347        vec.do_not_free_on_drop();
348        let vec = vec.ptr;
349        let isl_rs_result = unsafe { isl_vec_drop_els(vec, pos, n) };
350        let isl_rs_result = Vec { ptr: isl_rs_result,
351                                  should_free_on_drop: true };
352        isl_rs_result
353    }
354
355    /// Wraps `isl_vec_add_els`.
356    pub fn add_els(self, n: u32) -> Vec {
357        let vec = self;
358        let mut vec = vec;
359        vec.do_not_free_on_drop();
360        let vec = vec.ptr;
361        let isl_rs_result = unsafe { isl_vec_add_els(vec, n) };
362        let isl_rs_result = Vec { ptr: isl_rs_result,
363                                  should_free_on_drop: true };
364        isl_rs_result
365    }
366
367    /// Wraps `isl_vec_insert_els`.
368    pub fn insert_els(self, pos: u32, n: u32) -> Vec {
369        let vec = self;
370        let mut vec = vec;
371        vec.do_not_free_on_drop();
372        let vec = vec.ptr;
373        let isl_rs_result = unsafe { isl_vec_insert_els(vec, pos, n) };
374        let isl_rs_result = Vec { ptr: isl_rs_result,
375                                  should_free_on_drop: true };
376        isl_rs_result
377    }
378
379    /// Wraps `isl_vec_insert_zero_els`.
380    pub fn insert_zero_els(self, pos: u32, n: u32) -> Vec {
381        let vec = self;
382        let mut vec = vec;
383        vec.do_not_free_on_drop();
384        let vec = vec.ptr;
385        let isl_rs_result = unsafe { isl_vec_insert_zero_els(vec, pos, n) };
386        let isl_rs_result = Vec { ptr: isl_rs_result,
387                                  should_free_on_drop: true };
388        isl_rs_result
389    }
390
391    /// Wraps `isl_vec_move_els`.
392    pub fn move_els(self, dst_col: u32, src_col: u32, n: u32) -> Vec {
393        let vec = self;
394        let mut vec = vec;
395        vec.do_not_free_on_drop();
396        let vec = vec.ptr;
397        let isl_rs_result = unsafe { isl_vec_move_els(vec, dst_col, src_col, n) };
398        let isl_rs_result = Vec { ptr: isl_rs_result,
399                                  should_free_on_drop: true };
400        isl_rs_result
401    }
402
403    /// Does not call isl_xxx_free() on being dropped. (For internal use only.)
404    pub fn do_not_free_on_drop(&mut self) {
405        self.should_free_on_drop = false;
406    }
407}
408
409impl Drop for Vec {
410    fn drop(&mut self) {
411        if self.should_free_on_drop {
412            unsafe {
413                isl_vec_free(self.ptr);
414            }
415        }
416    }
417}