isl_rs/bindings/
basic_set_list.rs1use super::{BasicSet, Context};
5use libc::uintptr_t;
6use std::ffi::{CStr, CString};
7use std::os::raw::c_char;
8
9pub struct BasicSetList {
11 pub ptr: uintptr_t,
12 pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17 fn isl_basic_set_list_free(list: uintptr_t) -> uintptr_t;
18
19 fn isl_basic_set_list_insert(list: uintptr_t, pos: u32, el: uintptr_t) -> uintptr_t;
20
21 fn isl_basic_set_list_dump(list: uintptr_t) -> ();
22
23 fn isl_basic_set_list_copy(list: uintptr_t) -> uintptr_t;
24
25 fn isl_basic_set_list_get_ctx(list: uintptr_t) -> uintptr_t;
26
27 fn isl_basic_set_list_get_at(list: uintptr_t, index: i32) -> uintptr_t;
28
29 fn isl_basic_set_list_drop(list: uintptr_t, first: u32, n: u32) -> uintptr_t;
30
31 fn isl_basic_set_list_set_basic_set(list: uintptr_t, index: i32, el: uintptr_t) -> uintptr_t;
32
33 fn isl_basic_set_list_n_basic_set(list: uintptr_t) -> i32;
34
35 fn isl_basic_set_list_clear(list: uintptr_t) -> uintptr_t;
36
37 fn isl_basic_set_list_concat(list1: uintptr_t, list2: uintptr_t) -> uintptr_t;
38
39 fn isl_basic_set_list_coefficients(list: uintptr_t) -> uintptr_t;
40
41 fn isl_basic_set_list_swap(list: uintptr_t, pos1: u32, pos2: u32) -> uintptr_t;
42
43 fn isl_basic_set_list_size(list: uintptr_t) -> i32;
44
45 fn isl_basic_set_list_reverse(list: uintptr_t) -> uintptr_t;
46
47 fn isl_basic_set_list_get_basic_set(list: uintptr_t, index: i32) -> uintptr_t;
48
49 fn isl_basic_set_list_add(list: uintptr_t, el: uintptr_t) -> uintptr_t;
50
51 fn isl_basic_set_list_from_basic_set(el: uintptr_t) -> uintptr_t;
52
53 fn isl_basic_set_list_intersect(list: uintptr_t) -> uintptr_t;
54
55 fn isl_basic_set_list_to_str(list: uintptr_t) -> *const c_char;
56
57 fn isl_basic_set_list_set_at(list: uintptr_t, index: i32, el: uintptr_t) -> uintptr_t;
58
59 fn isl_basic_set_list_alloc(ctx: uintptr_t, n: i32) -> uintptr_t;
60
61}
62
63impl BasicSetList {
64 pub fn free(self) -> BasicSetList {
66 let list = self;
67 let mut list = list;
68 list.do_not_free_on_drop();
69 let list = list.ptr;
70 let isl_rs_result = unsafe { isl_basic_set_list_free(list) };
71 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
72 should_free_on_drop: true };
73 isl_rs_result
74 }
75
76 pub fn insert(self, pos: u32, el: BasicSet) -> BasicSetList {
78 let list = self;
79 let mut list = list;
80 list.do_not_free_on_drop();
81 let list = list.ptr;
82 let mut el = el;
83 el.do_not_free_on_drop();
84 let el = el.ptr;
85 let isl_rs_result = unsafe { isl_basic_set_list_insert(list, pos, el) };
86 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
87 should_free_on_drop: true };
88 isl_rs_result
89 }
90
91 pub fn dump(&self) -> () {
93 let list = self;
94 let list = list.ptr;
95 let isl_rs_result = unsafe { isl_basic_set_list_dump(list) };
96 isl_rs_result
97 }
98
99 pub fn copy(&self) -> BasicSetList {
101 let list = self;
102 let list = list.ptr;
103 let isl_rs_result = unsafe { isl_basic_set_list_copy(list) };
104 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
105 should_free_on_drop: true };
106 isl_rs_result
107 }
108
109 pub fn get_ctx(&self) -> Context {
111 let list = self;
112 let list = list.ptr;
113 let isl_rs_result = unsafe { isl_basic_set_list_get_ctx(list) };
114 let isl_rs_result = Context { ptr: isl_rs_result,
115 should_free_on_drop: false };
116 isl_rs_result
117 }
118
119 pub fn get_at(&self, index: i32) -> BasicSet {
121 let list = self;
122 let list = list.ptr;
123 let isl_rs_result = unsafe { isl_basic_set_list_get_at(list, index) };
124 let isl_rs_result = BasicSet { ptr: isl_rs_result,
125 should_free_on_drop: true };
126 isl_rs_result
127 }
128
129 pub fn drop(self, first: u32, n: u32) -> BasicSetList {
131 let list = self;
132 let mut list = list;
133 list.do_not_free_on_drop();
134 let list = list.ptr;
135 let isl_rs_result = unsafe { isl_basic_set_list_drop(list, first, n) };
136 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
137 should_free_on_drop: true };
138 isl_rs_result
139 }
140
141 pub fn set_basic_set(self, index: i32, el: BasicSet) -> BasicSetList {
143 let list = self;
144 let mut list = list;
145 list.do_not_free_on_drop();
146 let list = list.ptr;
147 let mut el = el;
148 el.do_not_free_on_drop();
149 let el = el.ptr;
150 let isl_rs_result = unsafe { isl_basic_set_list_set_basic_set(list, index, el) };
151 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
152 should_free_on_drop: true };
153 isl_rs_result
154 }
155
156 pub fn n_basic_set(&self) -> i32 {
158 let list = self;
159 let list = list.ptr;
160 let isl_rs_result = unsafe { isl_basic_set_list_n_basic_set(list) };
161 isl_rs_result
162 }
163
164 pub fn clear(self) -> BasicSetList {
166 let list = self;
167 let mut list = list;
168 list.do_not_free_on_drop();
169 let list = list.ptr;
170 let isl_rs_result = unsafe { isl_basic_set_list_clear(list) };
171 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
172 should_free_on_drop: true };
173 isl_rs_result
174 }
175
176 pub fn concat(self, list2: BasicSetList) -> BasicSetList {
178 let list1 = self;
179 let mut list1 = list1;
180 list1.do_not_free_on_drop();
181 let list1 = list1.ptr;
182 let mut list2 = list2;
183 list2.do_not_free_on_drop();
184 let list2 = list2.ptr;
185 let isl_rs_result = unsafe { isl_basic_set_list_concat(list1, list2) };
186 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
187 should_free_on_drop: true };
188 isl_rs_result
189 }
190
191 pub fn coefficients(self) -> BasicSetList {
193 let list = self;
194 let mut list = list;
195 list.do_not_free_on_drop();
196 let list = list.ptr;
197 let isl_rs_result = unsafe { isl_basic_set_list_coefficients(list) };
198 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
199 should_free_on_drop: true };
200 isl_rs_result
201 }
202
203 pub fn swap(self, pos1: u32, pos2: u32) -> BasicSetList {
205 let list = self;
206 let mut list = list;
207 list.do_not_free_on_drop();
208 let list = list.ptr;
209 let isl_rs_result = unsafe { isl_basic_set_list_swap(list, pos1, pos2) };
210 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
211 should_free_on_drop: true };
212 isl_rs_result
213 }
214
215 pub fn size(&self) -> i32 {
217 let list = self;
218 let list = list.ptr;
219 let isl_rs_result = unsafe { isl_basic_set_list_size(list) };
220 isl_rs_result
221 }
222
223 pub fn reverse(self) -> BasicSetList {
225 let list = self;
226 let mut list = list;
227 list.do_not_free_on_drop();
228 let list = list.ptr;
229 let isl_rs_result = unsafe { isl_basic_set_list_reverse(list) };
230 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
231 should_free_on_drop: true };
232 isl_rs_result
233 }
234
235 pub fn get_basic_set(&self, index: i32) -> BasicSet {
237 let list = self;
238 let list = list.ptr;
239 let isl_rs_result = unsafe { isl_basic_set_list_get_basic_set(list, index) };
240 let isl_rs_result = BasicSet { ptr: isl_rs_result,
241 should_free_on_drop: true };
242 isl_rs_result
243 }
244
245 pub fn add(self, el: BasicSet) -> BasicSetList {
247 let list = self;
248 let mut list = list;
249 list.do_not_free_on_drop();
250 let list = list.ptr;
251 let mut el = el;
252 el.do_not_free_on_drop();
253 let el = el.ptr;
254 let isl_rs_result = unsafe { isl_basic_set_list_add(list, el) };
255 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
256 should_free_on_drop: true };
257 isl_rs_result
258 }
259
260 pub fn from_basic_set(el: BasicSet) -> BasicSetList {
262 let mut el = el;
263 el.do_not_free_on_drop();
264 let el = el.ptr;
265 let isl_rs_result = unsafe { isl_basic_set_list_from_basic_set(el) };
266 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
267 should_free_on_drop: true };
268 isl_rs_result
269 }
270
271 pub fn intersect(self) -> BasicSet {
273 let list = self;
274 let mut list = list;
275 list.do_not_free_on_drop();
276 let list = list.ptr;
277 let isl_rs_result = unsafe { isl_basic_set_list_intersect(list) };
278 let isl_rs_result = BasicSet { ptr: isl_rs_result,
279 should_free_on_drop: true };
280 isl_rs_result
281 }
282
283 pub fn to_str(&self) -> &str {
285 let list = self;
286 let list = list.ptr;
287 let isl_rs_result = unsafe { isl_basic_set_list_to_str(list) };
288 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
289 let isl_rs_result = isl_rs_result.to_str().unwrap();
290 isl_rs_result
291 }
292
293 pub fn set_at(self, index: i32, el: BasicSet) -> BasicSetList {
295 let list = self;
296 let mut list = list;
297 list.do_not_free_on_drop();
298 let list = list.ptr;
299 let mut el = el;
300 el.do_not_free_on_drop();
301 let el = el.ptr;
302 let isl_rs_result = unsafe { isl_basic_set_list_set_at(list, index, el) };
303 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
304 should_free_on_drop: true };
305 isl_rs_result
306 }
307
308 pub fn alloc(ctx: &Context, n: i32) -> BasicSetList {
310 let ctx = ctx.ptr;
311 let isl_rs_result = unsafe { isl_basic_set_list_alloc(ctx, n) };
312 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
313 should_free_on_drop: true };
314 isl_rs_result
315 }
316
317 pub fn do_not_free_on_drop(&mut self) {
320 self.should_free_on_drop = false;
321 }
322}
323
324impl Drop for BasicSetList {
325 fn drop(&mut self) {
326 if self.should_free_on_drop {
327 unsafe {
328 isl_basic_set_list_free(self.ptr);
329 }
330 }
331 }
332}