isl_rs/bindings/
bset.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use crate::bindings::{
5    Aff, BasicMap, Context, DimType, Id, LocalSpace, Mat, Point, Set, Space, Val,
6};
7use libc::uintptr_t;
8use std::ffi::{CStr, CString};
9use std::os::raw::c_char;
10
11/// Wraps `isl_basic_set`.
12pub struct BasicSet {
13    pub ptr: uintptr_t,
14    pub should_free_on_drop: bool,
15}
16
17extern "C" {
18
19    fn isl_basic_set_dim(bset: uintptr_t, type_: DimType) -> i32;
20
21    fn isl_basic_set_n_dim(bset: uintptr_t) -> i32;
22
23    fn isl_basic_set_n_param(bset: uintptr_t) -> i32;
24
25    fn isl_basic_set_total_dim(bset: uintptr_t) -> i32;
26
27    fn isl_basic_set_get_ctx(bset: uintptr_t) -> uintptr_t;
28
29    fn isl_basic_set_get_space(bset: uintptr_t) -> uintptr_t;
30
31    fn isl_basic_set_get_div(bset: uintptr_t, pos: i32) -> uintptr_t;
32
33    fn isl_basic_set_get_local_space(bset: uintptr_t) -> uintptr_t;
34
35    fn isl_basic_set_get_tuple_name(bset: uintptr_t) -> *const c_char;
36
37    fn isl_basic_set_set_tuple_name(set: uintptr_t, s: *const c_char) -> uintptr_t;
38
39    fn isl_basic_set_get_dim_name(bset: uintptr_t, type_: DimType, pos: u32) -> *const c_char;
40
41    fn isl_basic_set_set_dim_name(bset: uintptr_t, type_: DimType, pos: u32, s: *const c_char)
42                                  -> uintptr_t;
43
44    fn isl_basic_set_get_dim_id(bset: uintptr_t, type_: DimType, pos: u32) -> uintptr_t;
45
46    fn isl_basic_set_set_tuple_id(bset: uintptr_t, id: uintptr_t) -> uintptr_t;
47
48    fn isl_basic_set_is_rational(bset: uintptr_t) -> i32;
49
50    fn isl_basic_set_free(bset: uintptr_t) -> uintptr_t;
51
52    fn isl_basic_set_copy(bset: uintptr_t) -> uintptr_t;
53
54    fn isl_basic_set_empty(space: uintptr_t) -> uintptr_t;
55
56    fn isl_basic_set_universe(space: uintptr_t) -> uintptr_t;
57
58    fn isl_basic_set_nat_universe(space: uintptr_t) -> uintptr_t;
59
60    fn isl_basic_set_positive_orthant(space: uintptr_t) -> uintptr_t;
61
62    fn isl_basic_set_intersect(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
63
64    fn isl_basic_set_intersect_params(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
65
66    fn isl_basic_set_apply(bset: uintptr_t, bmap: uintptr_t) -> uintptr_t;
67
68    fn isl_basic_set_affine_hull(bset: uintptr_t) -> uintptr_t;
69
70    fn isl_basic_set_remove_dims(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
71
72    fn isl_basic_set_sample(bset: uintptr_t) -> uintptr_t;
73
74    fn isl_basic_set_detect_equalities(bset: uintptr_t) -> uintptr_t;
75
76    fn isl_basic_set_remove_redundancies(bset: uintptr_t) -> uintptr_t;
77
78    fn isl_basic_set_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
79
80    fn isl_basic_set_dump(bset: uintptr_t);
81
82    fn isl_basic_set_fix_si(bset: uintptr_t, type_: DimType, pos: u32, value: i32) -> uintptr_t;
83
84    fn isl_basic_set_fix_val(bset: uintptr_t, type_: DimType, pos: u32, v: uintptr_t) -> uintptr_t;
85
86    fn isl_basic_set_lower_bound_val(bset: uintptr_t, type_: DimType, pos: u32, value: uintptr_t)
87                                     -> uintptr_t;
88
89    fn isl_basic_set_upper_bound_val(bset: uintptr_t, type_: DimType, pos: u32, value: uintptr_t)
90                                     -> uintptr_t;
91
92    fn isl_basic_set_is_equal(bset1: uintptr_t, bset2: uintptr_t) -> i32;
93
94    fn isl_basic_set_is_disjoint(bset1: uintptr_t, bset2: uintptr_t) -> i32;
95
96    fn isl_basic_set_lexmin(bset: uintptr_t) -> uintptr_t;
97
98    fn isl_basic_set_lexmax(bset: uintptr_t) -> uintptr_t;
99
100    fn isl_basic_set_union(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
101
102    fn isl_basic_set_compare_at(bset1: uintptr_t, bset2: uintptr_t, pos: i32) -> i32;
103
104    fn isl_basic_set_params(bset: uintptr_t) -> uintptr_t;
105
106    fn isl_basic_set_from_params(bset: uintptr_t) -> uintptr_t;
107
108    fn isl_basic_set_plain_is_universe(bset: uintptr_t) -> i32;
109
110    fn isl_basic_set_is_universe(bset: uintptr_t) -> i32;
111
112    fn isl_basic_set_plain_is_empty(bset: uintptr_t) -> i32;
113
114    fn isl_basic_set_is_empty(bset: uintptr_t) -> i32;
115
116    fn isl_basic_set_is_bounded(bset: uintptr_t) -> i32;
117
118    fn isl_basic_set_is_subset(bset1: uintptr_t, bset2: uintptr_t) -> i32;
119
120    fn isl_basic_set_plain_is_equal(bset1: uintptr_t, bset2: uintptr_t) -> i32;
121
122    fn isl_basic_set_to_set(bset: uintptr_t) -> uintptr_t;
123
124    fn isl_basic_set_sample_point(bset: uintptr_t) -> uintptr_t;
125
126    fn isl_basic_set_flat_product(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
127
128    fn isl_basic_set_insert_dims(bset: uintptr_t, type_: DimType, pos: u32, n: u32) -> uintptr_t;
129
130    fn isl_basic_set_add_dims(bset: uintptr_t, type_: DimType, n: u32) -> uintptr_t;
131
132    fn isl_basic_set_move_dims(bset: uintptr_t, dst_type: DimType, dst_pos: u32,
133                               src_type: DimType, src_pos: u32, n: u32)
134                               -> uintptr_t;
135
136    fn isl_basic_set_project_out(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
137
138    fn isl_basic_set_remove_divs(bset: uintptr_t) -> uintptr_t;
139
140    fn isl_basic_set_eliminate(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
141
142    fn isl_basic_set_remove_divs_involving_dims(bset: uintptr_t, type_: DimType, first: u32,
143                                                n: u32)
144                                                -> uintptr_t;
145
146    fn isl_basic_set_remove_unknown_divs(bset: uintptr_t) -> uintptr_t;
147
148    fn isl_basic_set_drop_constraints_involving_dims(bset: uintptr_t, type_: DimType, first: u32,
149                                                     n: u32)
150                                                     -> uintptr_t;
151
152    fn isl_basic_set_drop_constraints_not_involving_dims(bset: uintptr_t, type_: DimType,
153                                                         first: u32, n: u32)
154                                                         -> uintptr_t;
155
156    fn isl_basic_set_involves_dims(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> i32;
157
158    fn isl_basic_set_neg(bset: uintptr_t) -> uintptr_t;
159
160    fn isl_basic_set_compute_divs(bset: uintptr_t) -> uintptr_t;
161
162    fn isl_basic_set_gist(bset: uintptr_t, context: uintptr_t) -> uintptr_t;
163
164    fn isl_basic_set_from_point(pnt: uintptr_t) -> uintptr_t;
165
166    fn isl_basic_set_box_from_points(pnt1: uintptr_t, pnt2: uintptr_t) -> uintptr_t;
167
168    fn isl_basic_set_lift(bset: uintptr_t) -> uintptr_t;
169
170    fn isl_basic_set_align_params(bset: uintptr_t, model: uintptr_t) -> uintptr_t;
171
172    fn isl_basic_set_drop_unused_params(bset: uintptr_t) -> uintptr_t;
173
174    fn isl_basic_set_equalities_matrix(bset: uintptr_t, c1: DimType, c2: DimType, c3: DimType,
175                                       c4: DimType)
176                                       -> uintptr_t;
177
178    fn isl_basic_set_inequalities_matrix(bset: uintptr_t, c1: DimType, c2: DimType, c3: DimType,
179                                         c4: DimType)
180                                         -> uintptr_t;
181
182    fn isl_basic_set_from_constraint_matrices(space: uintptr_t, eq: uintptr_t, ineq: uintptr_t,
183                                              c1: DimType, c2: DimType, c3: DimType, c4: DimType)
184                                              -> uintptr_t;
185
186    fn isl_basic_set_reduced_basis(bset: uintptr_t) -> uintptr_t;
187
188    fn isl_basic_set_coefficients(bset: uintptr_t) -> uintptr_t;
189
190    fn isl_basic_set_solutions(bset: uintptr_t) -> uintptr_t;
191
192    fn isl_basic_set_to_str(bset: uintptr_t) -> *const c_char;
193
194}
195
196impl BasicSet {
197    /// Wraps `isl_basic_set_dim`.
198    pub fn dim(&self, type_: DimType) -> i32 {
199        let bset = self;
200        let bset = bset.ptr;
201        let isl_rs_result = unsafe { isl_basic_set_dim(bset, type_) };
202        isl_rs_result
203    }
204
205    /// Wraps `isl_basic_set_n_dim`.
206    pub fn n_dim(&self) -> i32 {
207        let bset = self;
208        let bset = bset.ptr;
209        let isl_rs_result = unsafe { isl_basic_set_n_dim(bset) };
210        isl_rs_result
211    }
212
213    /// Wraps `isl_basic_set_n_param`.
214    pub fn n_param(&self) -> i32 {
215        let bset = self;
216        let bset = bset.ptr;
217        let isl_rs_result = unsafe { isl_basic_set_n_param(bset) };
218        isl_rs_result
219    }
220
221    /// Wraps `isl_basic_set_total_dim`.
222    pub fn total_dim(&self) -> i32 {
223        let bset = self;
224        let bset = bset.ptr;
225        let isl_rs_result = unsafe { isl_basic_set_total_dim(bset) };
226        isl_rs_result
227    }
228
229    /// Wraps `isl_basic_set_get_ctx`.
230    pub fn get_ctx(&self) -> Context {
231        let bset = self;
232        let bset = bset.ptr;
233        let isl_rs_result = unsafe { isl_basic_set_get_ctx(bset) };
234        let isl_rs_result = Context { ptr: isl_rs_result,
235                                      should_free_on_drop: true };
236        let mut isl_rs_result = isl_rs_result;
237        isl_rs_result.do_not_free_on_drop();
238        isl_rs_result
239    }
240
241    /// Wraps `isl_basic_set_get_space`.
242    pub fn get_space(&self) -> Space {
243        let bset = self;
244        let bset = bset.ptr;
245        let isl_rs_result = unsafe { isl_basic_set_get_space(bset) };
246        let isl_rs_result = Space { ptr: isl_rs_result,
247                                    should_free_on_drop: true };
248        isl_rs_result
249    }
250
251    /// Wraps `isl_basic_set_get_div`.
252    pub fn get_div(&self, pos: i32) -> Aff {
253        let bset = self;
254        let bset = bset.ptr;
255        let isl_rs_result = unsafe { isl_basic_set_get_div(bset, pos) };
256        let isl_rs_result = Aff { ptr: isl_rs_result,
257                                  should_free_on_drop: true };
258        isl_rs_result
259    }
260
261    /// Wraps `isl_basic_set_get_local_space`.
262    pub fn get_local_space(&self) -> LocalSpace {
263        let bset = self;
264        let bset = bset.ptr;
265        let isl_rs_result = unsafe { isl_basic_set_get_local_space(bset) };
266        let isl_rs_result = LocalSpace { ptr: isl_rs_result,
267                                         should_free_on_drop: true };
268        isl_rs_result
269    }
270
271    /// Wraps `isl_basic_set_get_tuple_name`.
272    pub fn get_tuple_name(&self) -> &str {
273        let bset = self;
274        let bset = bset.ptr;
275        let isl_rs_result = unsafe { isl_basic_set_get_tuple_name(bset) };
276        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
277        let isl_rs_result = isl_rs_result.to_str().unwrap();
278        isl_rs_result
279    }
280
281    /// Wraps `isl_basic_set_set_tuple_name`.
282    pub fn set_tuple_name(self, s: &str) -> BasicSet {
283        let set = self;
284        let mut set = set;
285        set.do_not_free_on_drop();
286        let set = set.ptr;
287        let s = CString::new(s).unwrap();
288        let s = s.as_ptr();
289        let isl_rs_result = unsafe { isl_basic_set_set_tuple_name(set, s) };
290        let isl_rs_result = BasicSet { ptr: isl_rs_result,
291                                       should_free_on_drop: true };
292        isl_rs_result
293    }
294
295    /// Wraps `isl_basic_set_get_dim_name`.
296    pub fn get_dim_name(&self, type_: DimType, pos: u32) -> &str {
297        let bset = self;
298        let bset = bset.ptr;
299        let isl_rs_result = unsafe { isl_basic_set_get_dim_name(bset, type_, pos) };
300        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
301        let isl_rs_result = isl_rs_result.to_str().unwrap();
302        isl_rs_result
303    }
304
305    /// Wraps `isl_basic_set_set_dim_name`.
306    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> BasicSet {
307        let bset = self;
308        let mut bset = bset;
309        bset.do_not_free_on_drop();
310        let bset = bset.ptr;
311        let s = CString::new(s).unwrap();
312        let s = s.as_ptr();
313        let isl_rs_result = unsafe { isl_basic_set_set_dim_name(bset, type_, pos, s) };
314        let isl_rs_result = BasicSet { ptr: isl_rs_result,
315                                       should_free_on_drop: true };
316        isl_rs_result
317    }
318
319    /// Wraps `isl_basic_set_get_dim_id`.
320    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Id {
321        let bset = self;
322        let bset = bset.ptr;
323        let isl_rs_result = unsafe { isl_basic_set_get_dim_id(bset, type_, pos) };
324        let isl_rs_result = Id { ptr: isl_rs_result,
325                                 should_free_on_drop: true };
326        isl_rs_result
327    }
328
329    /// Wraps `isl_basic_set_set_tuple_id`.
330    pub fn set_tuple_id(self, id: Id) -> BasicSet {
331        let bset = self;
332        let mut bset = bset;
333        bset.do_not_free_on_drop();
334        let bset = bset.ptr;
335        let mut id = id;
336        id.do_not_free_on_drop();
337        let id = id.ptr;
338        let isl_rs_result = unsafe { isl_basic_set_set_tuple_id(bset, id) };
339        let isl_rs_result = BasicSet { ptr: isl_rs_result,
340                                       should_free_on_drop: true };
341        isl_rs_result
342    }
343
344    /// Wraps `isl_basic_set_is_rational`.
345    pub fn is_rational(&self) -> i32 {
346        let bset = self;
347        let bset = bset.ptr;
348        let isl_rs_result = unsafe { isl_basic_set_is_rational(bset) };
349        isl_rs_result
350    }
351
352    /// Wraps `isl_basic_set_free`.
353    pub fn free(self) -> BasicSet {
354        let bset = self;
355        let mut bset = bset;
356        bset.do_not_free_on_drop();
357        let bset = bset.ptr;
358        let isl_rs_result = unsafe { isl_basic_set_free(bset) };
359        let isl_rs_result = BasicSet { ptr: isl_rs_result,
360                                       should_free_on_drop: true };
361        isl_rs_result
362    }
363
364    /// Wraps `isl_basic_set_copy`.
365    pub fn copy(&self) -> BasicSet {
366        let bset = self;
367        let bset = bset.ptr;
368        let isl_rs_result = unsafe { isl_basic_set_copy(bset) };
369        let isl_rs_result = BasicSet { ptr: isl_rs_result,
370                                       should_free_on_drop: true };
371        isl_rs_result
372    }
373
374    /// Wraps `isl_basic_set_empty`.
375    pub fn empty(space: Space) -> BasicSet {
376        let mut space = space;
377        space.do_not_free_on_drop();
378        let space = space.ptr;
379        let isl_rs_result = unsafe { isl_basic_set_empty(space) };
380        let isl_rs_result = BasicSet { ptr: isl_rs_result,
381                                       should_free_on_drop: true };
382        isl_rs_result
383    }
384
385    /// Wraps `isl_basic_set_universe`.
386    pub fn universe(space: Space) -> BasicSet {
387        let mut space = space;
388        space.do_not_free_on_drop();
389        let space = space.ptr;
390        let isl_rs_result = unsafe { isl_basic_set_universe(space) };
391        let isl_rs_result = BasicSet { ptr: isl_rs_result,
392                                       should_free_on_drop: true };
393        isl_rs_result
394    }
395
396    /// Wraps `isl_basic_set_nat_universe`.
397    pub fn nat_universe(space: Space) -> BasicSet {
398        let mut space = space;
399        space.do_not_free_on_drop();
400        let space = space.ptr;
401        let isl_rs_result = unsafe { isl_basic_set_nat_universe(space) };
402        let isl_rs_result = BasicSet { ptr: isl_rs_result,
403                                       should_free_on_drop: true };
404        isl_rs_result
405    }
406
407    /// Wraps `isl_basic_set_positive_orthant`.
408    pub fn positive_orthant(space: Space) -> BasicSet {
409        let mut space = space;
410        space.do_not_free_on_drop();
411        let space = space.ptr;
412        let isl_rs_result = unsafe { isl_basic_set_positive_orthant(space) };
413        let isl_rs_result = BasicSet { ptr: isl_rs_result,
414                                       should_free_on_drop: true };
415        isl_rs_result
416    }
417
418    /// Wraps `isl_basic_set_intersect`.
419    pub fn intersect(self, bset2: BasicSet) -> BasicSet {
420        let bset1 = self;
421        let mut bset1 = bset1;
422        bset1.do_not_free_on_drop();
423        let bset1 = bset1.ptr;
424        let mut bset2 = bset2;
425        bset2.do_not_free_on_drop();
426        let bset2 = bset2.ptr;
427        let isl_rs_result = unsafe { isl_basic_set_intersect(bset1, bset2) };
428        let isl_rs_result = BasicSet { ptr: isl_rs_result,
429                                       should_free_on_drop: true };
430        isl_rs_result
431    }
432
433    /// Wraps `isl_basic_set_intersect_params`.
434    pub fn intersect_params(self, bset2: BasicSet) -> BasicSet {
435        let bset1 = self;
436        let mut bset1 = bset1;
437        bset1.do_not_free_on_drop();
438        let bset1 = bset1.ptr;
439        let mut bset2 = bset2;
440        bset2.do_not_free_on_drop();
441        let bset2 = bset2.ptr;
442        let isl_rs_result = unsafe { isl_basic_set_intersect_params(bset1, bset2) };
443        let isl_rs_result = BasicSet { ptr: isl_rs_result,
444                                       should_free_on_drop: true };
445        isl_rs_result
446    }
447
448    /// Wraps `isl_basic_set_apply`.
449    pub fn apply(self, bmap: BasicMap) -> BasicSet {
450        let bset = self;
451        let mut bset = bset;
452        bset.do_not_free_on_drop();
453        let bset = bset.ptr;
454        let mut bmap = bmap;
455        bmap.do_not_free_on_drop();
456        let bmap = bmap.ptr;
457        let isl_rs_result = unsafe { isl_basic_set_apply(bset, bmap) };
458        let isl_rs_result = BasicSet { ptr: isl_rs_result,
459                                       should_free_on_drop: true };
460        isl_rs_result
461    }
462
463    /// Wraps `isl_basic_set_affine_hull`.
464    pub fn affine_hull(self) -> BasicSet {
465        let bset = self;
466        let mut bset = bset;
467        bset.do_not_free_on_drop();
468        let bset = bset.ptr;
469        let isl_rs_result = unsafe { isl_basic_set_affine_hull(bset) };
470        let isl_rs_result = BasicSet { ptr: isl_rs_result,
471                                       should_free_on_drop: true };
472        isl_rs_result
473    }
474
475    /// Wraps `isl_basic_set_remove_dims`.
476    pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> BasicSet {
477        let bset = self;
478        let mut bset = bset;
479        bset.do_not_free_on_drop();
480        let bset = bset.ptr;
481        let isl_rs_result = unsafe { isl_basic_set_remove_dims(bset, type_, first, n) };
482        let isl_rs_result = BasicSet { ptr: isl_rs_result,
483                                       should_free_on_drop: true };
484        isl_rs_result
485    }
486
487    /// Wraps `isl_basic_set_sample`.
488    pub fn sample(self) -> BasicSet {
489        let bset = self;
490        let mut bset = bset;
491        bset.do_not_free_on_drop();
492        let bset = bset.ptr;
493        let isl_rs_result = unsafe { isl_basic_set_sample(bset) };
494        let isl_rs_result = BasicSet { ptr: isl_rs_result,
495                                       should_free_on_drop: true };
496        isl_rs_result
497    }
498
499    /// Wraps `isl_basic_set_detect_equalities`.
500    pub fn detect_equalities(self) -> BasicSet {
501        let bset = self;
502        let mut bset = bset;
503        bset.do_not_free_on_drop();
504        let bset = bset.ptr;
505        let isl_rs_result = unsafe { isl_basic_set_detect_equalities(bset) };
506        let isl_rs_result = BasicSet { ptr: isl_rs_result,
507                                       should_free_on_drop: true };
508        isl_rs_result
509    }
510
511    /// Wraps `isl_basic_set_remove_redundancies`.
512    pub fn remove_redundancies(self) -> BasicSet {
513        let bset = self;
514        let mut bset = bset;
515        bset.do_not_free_on_drop();
516        let bset = bset.ptr;
517        let isl_rs_result = unsafe { isl_basic_set_remove_redundancies(bset) };
518        let isl_rs_result = BasicSet { ptr: isl_rs_result,
519                                       should_free_on_drop: true };
520        isl_rs_result
521    }
522
523    /// Wraps `isl_basic_set_read_from_str`.
524    pub fn read_from_str(ctx: &Context, str_: &str) -> BasicSet {
525        let ctx = ctx.ptr;
526        let str_ = CString::new(str_).unwrap();
527        let str_ = str_.as_ptr();
528        let isl_rs_result = unsafe { isl_basic_set_read_from_str(ctx, str_) };
529        let isl_rs_result = BasicSet { ptr: isl_rs_result,
530                                       should_free_on_drop: true };
531        isl_rs_result
532    }
533
534    /// Wraps `isl_basic_set_dump`.
535    pub fn dump(&self) {
536        let bset = self;
537        let bset = bset.ptr;
538        let isl_rs_result = unsafe { isl_basic_set_dump(bset) };
539        isl_rs_result
540    }
541
542    /// Wraps `isl_basic_set_fix_si`.
543    pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> BasicSet {
544        let bset = self;
545        let mut bset = bset;
546        bset.do_not_free_on_drop();
547        let bset = bset.ptr;
548        let isl_rs_result = unsafe { isl_basic_set_fix_si(bset, type_, pos, value) };
549        let isl_rs_result = BasicSet { ptr: isl_rs_result,
550                                       should_free_on_drop: true };
551        isl_rs_result
552    }
553
554    /// Wraps `isl_basic_set_fix_val`.
555    pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> BasicSet {
556        let bset = self;
557        let mut bset = bset;
558        bset.do_not_free_on_drop();
559        let bset = bset.ptr;
560        let mut v = v;
561        v.do_not_free_on_drop();
562        let v = v.ptr;
563        let isl_rs_result = unsafe { isl_basic_set_fix_val(bset, type_, pos, v) };
564        let isl_rs_result = BasicSet { ptr: isl_rs_result,
565                                       should_free_on_drop: true };
566        isl_rs_result
567    }
568
569    /// Wraps `isl_basic_set_lower_bound_val`.
570    pub fn lower_bound_val(self, type_: DimType, pos: u32, value: Val) -> BasicSet {
571        let bset = self;
572        let mut bset = bset;
573        bset.do_not_free_on_drop();
574        let bset = bset.ptr;
575        let mut value = value;
576        value.do_not_free_on_drop();
577        let value = value.ptr;
578        let isl_rs_result = unsafe { isl_basic_set_lower_bound_val(bset, type_, pos, value) };
579        let isl_rs_result = BasicSet { ptr: isl_rs_result,
580                                       should_free_on_drop: true };
581        isl_rs_result
582    }
583
584    /// Wraps `isl_basic_set_upper_bound_val`.
585    pub fn upper_bound_val(self, type_: DimType, pos: u32, value: Val) -> BasicSet {
586        let bset = self;
587        let mut bset = bset;
588        bset.do_not_free_on_drop();
589        let bset = bset.ptr;
590        let mut value = value;
591        value.do_not_free_on_drop();
592        let value = value.ptr;
593        let isl_rs_result = unsafe { isl_basic_set_upper_bound_val(bset, type_, pos, value) };
594        let isl_rs_result = BasicSet { ptr: isl_rs_result,
595                                       should_free_on_drop: true };
596        isl_rs_result
597    }
598
599    /// Wraps `isl_basic_set_is_equal`.
600    pub fn is_equal(&self, bset2: &BasicSet) -> bool {
601        let bset1 = self;
602        let bset1 = bset1.ptr;
603        let bset2 = bset2.ptr;
604        let isl_rs_result = unsafe { isl_basic_set_is_equal(bset1, bset2) };
605        let isl_rs_result = match isl_rs_result {
606            0 => false,
607            1 => true,
608            _ => panic!("Got isl_bool = -1"),
609        };
610        isl_rs_result
611    }
612
613    /// Wraps `isl_basic_set_is_disjoint`.
614    pub fn is_disjoint(&self, bset2: &BasicSet) -> bool {
615        let bset1 = self;
616        let bset1 = bset1.ptr;
617        let bset2 = bset2.ptr;
618        let isl_rs_result = unsafe { isl_basic_set_is_disjoint(bset1, bset2) };
619        let isl_rs_result = match isl_rs_result {
620            0 => false,
621            1 => true,
622            _ => panic!("Got isl_bool = -1"),
623        };
624        isl_rs_result
625    }
626
627    /// Wraps `isl_basic_set_lexmin`.
628    pub fn lexmin(self) -> Set {
629        let bset = self;
630        let mut bset = bset;
631        bset.do_not_free_on_drop();
632        let bset = bset.ptr;
633        let isl_rs_result = unsafe { isl_basic_set_lexmin(bset) };
634        let isl_rs_result = Set { ptr: isl_rs_result,
635                                  should_free_on_drop: true };
636        isl_rs_result
637    }
638
639    /// Wraps `isl_basic_set_lexmax`.
640    pub fn lexmax(self) -> Set {
641        let bset = self;
642        let mut bset = bset;
643        bset.do_not_free_on_drop();
644        let bset = bset.ptr;
645        let isl_rs_result = unsafe { isl_basic_set_lexmax(bset) };
646        let isl_rs_result = Set { ptr: isl_rs_result,
647                                  should_free_on_drop: true };
648        isl_rs_result
649    }
650
651    /// Wraps `isl_basic_set_union`.
652    pub fn union(self, bset2: BasicSet) -> Set {
653        let bset1 = self;
654        let mut bset1 = bset1;
655        bset1.do_not_free_on_drop();
656        let bset1 = bset1.ptr;
657        let mut bset2 = bset2;
658        bset2.do_not_free_on_drop();
659        let bset2 = bset2.ptr;
660        let isl_rs_result = unsafe { isl_basic_set_union(bset1, bset2) };
661        let isl_rs_result = Set { ptr: isl_rs_result,
662                                  should_free_on_drop: true };
663        isl_rs_result
664    }
665
666    /// Wraps `isl_basic_set_compare_at`.
667    pub fn compare_at(&self, bset2: &BasicSet, pos: i32) -> i32 {
668        let bset1 = self;
669        let bset1 = bset1.ptr;
670        let bset2 = bset2.ptr;
671        let isl_rs_result = unsafe { isl_basic_set_compare_at(bset1, bset2, pos) };
672        isl_rs_result
673    }
674
675    /// Wraps `isl_basic_set_params`.
676    pub fn params(self) -> BasicSet {
677        let bset = self;
678        let mut bset = bset;
679        bset.do_not_free_on_drop();
680        let bset = bset.ptr;
681        let isl_rs_result = unsafe { isl_basic_set_params(bset) };
682        let isl_rs_result = BasicSet { ptr: isl_rs_result,
683                                       should_free_on_drop: true };
684        isl_rs_result
685    }
686
687    /// Wraps `isl_basic_set_from_params`.
688    pub fn from_params(self) -> BasicSet {
689        let bset = self;
690        let mut bset = bset;
691        bset.do_not_free_on_drop();
692        let bset = bset.ptr;
693        let isl_rs_result = unsafe { isl_basic_set_from_params(bset) };
694        let isl_rs_result = BasicSet { ptr: isl_rs_result,
695                                       should_free_on_drop: true };
696        isl_rs_result
697    }
698
699    /// Wraps `isl_basic_set_plain_is_universe`.
700    pub fn plain_is_universe(&self) -> bool {
701        let bset = self;
702        let bset = bset.ptr;
703        let isl_rs_result = unsafe { isl_basic_set_plain_is_universe(bset) };
704        let isl_rs_result = match isl_rs_result {
705            0 => false,
706            1 => true,
707            _ => panic!("Got isl_bool = -1"),
708        };
709        isl_rs_result
710    }
711
712    /// Wraps `isl_basic_set_is_universe`.
713    pub fn is_universe(&self) -> bool {
714        let bset = self;
715        let bset = bset.ptr;
716        let isl_rs_result = unsafe { isl_basic_set_is_universe(bset) };
717        let isl_rs_result = match isl_rs_result {
718            0 => false,
719            1 => true,
720            _ => panic!("Got isl_bool = -1"),
721        };
722        isl_rs_result
723    }
724
725    /// Wraps `isl_basic_set_plain_is_empty`.
726    pub fn plain_is_empty(&self) -> bool {
727        let bset = self;
728        let bset = bset.ptr;
729        let isl_rs_result = unsafe { isl_basic_set_plain_is_empty(bset) };
730        let isl_rs_result = match isl_rs_result {
731            0 => false,
732            1 => true,
733            _ => panic!("Got isl_bool = -1"),
734        };
735        isl_rs_result
736    }
737
738    /// Wraps `isl_basic_set_is_empty`.
739    pub fn is_empty(&self) -> bool {
740        let bset = self;
741        let bset = bset.ptr;
742        let isl_rs_result = unsafe { isl_basic_set_is_empty(bset) };
743        let isl_rs_result = match isl_rs_result {
744            0 => false,
745            1 => true,
746            _ => panic!("Got isl_bool = -1"),
747        };
748        isl_rs_result
749    }
750
751    /// Wraps `isl_basic_set_is_bounded`.
752    pub fn is_bounded(&self) -> bool {
753        let bset = self;
754        let bset = bset.ptr;
755        let isl_rs_result = unsafe { isl_basic_set_is_bounded(bset) };
756        let isl_rs_result = match isl_rs_result {
757            0 => false,
758            1 => true,
759            _ => panic!("Got isl_bool = -1"),
760        };
761        isl_rs_result
762    }
763
764    /// Wraps `isl_basic_set_is_subset`.
765    pub fn is_subset(&self, bset2: &BasicSet) -> bool {
766        let bset1 = self;
767        let bset1 = bset1.ptr;
768        let bset2 = bset2.ptr;
769        let isl_rs_result = unsafe { isl_basic_set_is_subset(bset1, bset2) };
770        let isl_rs_result = match isl_rs_result {
771            0 => false,
772            1 => true,
773            _ => panic!("Got isl_bool = -1"),
774        };
775        isl_rs_result
776    }
777
778    /// Wraps `isl_basic_set_plain_is_equal`.
779    pub fn plain_is_equal(&self, bset2: &BasicSet) -> bool {
780        let bset1 = self;
781        let bset1 = bset1.ptr;
782        let bset2 = bset2.ptr;
783        let isl_rs_result = unsafe { isl_basic_set_plain_is_equal(bset1, bset2) };
784        let isl_rs_result = match isl_rs_result {
785            0 => false,
786            1 => true,
787            _ => panic!("Got isl_bool = -1"),
788        };
789        isl_rs_result
790    }
791
792    /// Wraps `isl_basic_set_to_set`.
793    pub fn to_set(self) -> Set {
794        let bset = self;
795        let mut bset = bset;
796        bset.do_not_free_on_drop();
797        let bset = bset.ptr;
798        let isl_rs_result = unsafe { isl_basic_set_to_set(bset) };
799        let isl_rs_result = Set { ptr: isl_rs_result,
800                                  should_free_on_drop: true };
801        isl_rs_result
802    }
803
804    /// Wraps `isl_basic_set_sample_point`.
805    pub fn sample_point(self) -> Point {
806        let bset = self;
807        let mut bset = bset;
808        bset.do_not_free_on_drop();
809        let bset = bset.ptr;
810        let isl_rs_result = unsafe { isl_basic_set_sample_point(bset) };
811        let isl_rs_result = Point { ptr: isl_rs_result,
812                                    should_free_on_drop: true };
813        isl_rs_result
814    }
815
816    /// Wraps `isl_basic_set_flat_product`.
817    pub fn flat_product(self, bset2: BasicSet) -> BasicSet {
818        let bset1 = self;
819        let mut bset1 = bset1;
820        bset1.do_not_free_on_drop();
821        let bset1 = bset1.ptr;
822        let mut bset2 = bset2;
823        bset2.do_not_free_on_drop();
824        let bset2 = bset2.ptr;
825        let isl_rs_result = unsafe { isl_basic_set_flat_product(bset1, bset2) };
826        let isl_rs_result = BasicSet { ptr: isl_rs_result,
827                                       should_free_on_drop: true };
828        isl_rs_result
829    }
830
831    /// Wraps `isl_basic_set_insert_dims`.
832    pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> BasicSet {
833        let bset = self;
834        let mut bset = bset;
835        bset.do_not_free_on_drop();
836        let bset = bset.ptr;
837        let isl_rs_result = unsafe { isl_basic_set_insert_dims(bset, type_, pos, n) };
838        let isl_rs_result = BasicSet { ptr: isl_rs_result,
839                                       should_free_on_drop: true };
840        isl_rs_result
841    }
842
843    /// Wraps `isl_basic_set_add_dims`.
844    pub fn add_dims(self, type_: DimType, n: u32) -> BasicSet {
845        let bset = self;
846        let mut bset = bset;
847        bset.do_not_free_on_drop();
848        let bset = bset.ptr;
849        let isl_rs_result = unsafe { isl_basic_set_add_dims(bset, type_, n) };
850        let isl_rs_result = BasicSet { ptr: isl_rs_result,
851                                       should_free_on_drop: true };
852        isl_rs_result
853    }
854
855    /// Wraps `isl_basic_set_move_dims`.
856    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
857                     n: u32)
858                     -> BasicSet {
859        let bset = self;
860        let mut bset = bset;
861        bset.do_not_free_on_drop();
862        let bset = bset.ptr;
863        let isl_rs_result =
864            unsafe { isl_basic_set_move_dims(bset, dst_type, dst_pos, src_type, src_pos, n) };
865        let isl_rs_result = BasicSet { ptr: isl_rs_result,
866                                       should_free_on_drop: true };
867        isl_rs_result
868    }
869
870    /// Wraps `isl_basic_set_project_out`.
871    pub fn project_out(self, type_: DimType, first: u32, n: u32) -> BasicSet {
872        let bset = self;
873        let mut bset = bset;
874        bset.do_not_free_on_drop();
875        let bset = bset.ptr;
876        let isl_rs_result = unsafe { isl_basic_set_project_out(bset, type_, first, n) };
877        let isl_rs_result = BasicSet { ptr: isl_rs_result,
878                                       should_free_on_drop: true };
879        isl_rs_result
880    }
881
882    /// Wraps `isl_basic_set_remove_divs`.
883    pub fn remove_divs(self) -> BasicSet {
884        let bset = self;
885        let mut bset = bset;
886        bset.do_not_free_on_drop();
887        let bset = bset.ptr;
888        let isl_rs_result = unsafe { isl_basic_set_remove_divs(bset) };
889        let isl_rs_result = BasicSet { ptr: isl_rs_result,
890                                       should_free_on_drop: true };
891        isl_rs_result
892    }
893
894    /// Wraps `isl_basic_set_eliminate`.
895    pub fn eliminate(self, type_: DimType, first: u32, n: u32) -> BasicSet {
896        let bset = self;
897        let mut bset = bset;
898        bset.do_not_free_on_drop();
899        let bset = bset.ptr;
900        let isl_rs_result = unsafe { isl_basic_set_eliminate(bset, type_, first, n) };
901        let isl_rs_result = BasicSet { ptr: isl_rs_result,
902                                       should_free_on_drop: true };
903        isl_rs_result
904    }
905
906    /// Wraps `isl_basic_set_remove_divs_involving_dims`.
907    pub fn remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32) -> BasicSet {
908        let bset = self;
909        let mut bset = bset;
910        bset.do_not_free_on_drop();
911        let bset = bset.ptr;
912        let isl_rs_result =
913            unsafe { isl_basic_set_remove_divs_involving_dims(bset, type_, first, n) };
914        let isl_rs_result = BasicSet { ptr: isl_rs_result,
915                                       should_free_on_drop: true };
916        isl_rs_result
917    }
918
919    /// Wraps `isl_basic_set_remove_unknown_divs`.
920    pub fn remove_unknown_divs(self) -> BasicSet {
921        let bset = self;
922        let mut bset = bset;
923        bset.do_not_free_on_drop();
924        let bset = bset.ptr;
925        let isl_rs_result = unsafe { isl_basic_set_remove_unknown_divs(bset) };
926        let isl_rs_result = BasicSet { ptr: isl_rs_result,
927                                       should_free_on_drop: true };
928        isl_rs_result
929    }
930
931    /// Wraps `isl_basic_set_drop_constraints_involving_dims`.
932    pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32) -> BasicSet {
933        let bset = self;
934        let mut bset = bset;
935        bset.do_not_free_on_drop();
936        let bset = bset.ptr;
937        let isl_rs_result =
938            unsafe { isl_basic_set_drop_constraints_involving_dims(bset, type_, first, n) };
939        let isl_rs_result = BasicSet { ptr: isl_rs_result,
940                                       should_free_on_drop: true };
941        isl_rs_result
942    }
943
944    /// Wraps `isl_basic_set_drop_constraints_not_involving_dims`.
945    pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32)
946                                               -> BasicSet {
947        let bset = self;
948        let mut bset = bset;
949        bset.do_not_free_on_drop();
950        let bset = bset.ptr;
951        let isl_rs_result =
952            unsafe { isl_basic_set_drop_constraints_not_involving_dims(bset, type_, first, n) };
953        let isl_rs_result = BasicSet { ptr: isl_rs_result,
954                                       should_free_on_drop: true };
955        isl_rs_result
956    }
957
958    /// Wraps `isl_basic_set_involves_dims`.
959    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> bool {
960        let bset = self;
961        let bset = bset.ptr;
962        let isl_rs_result = unsafe { isl_basic_set_involves_dims(bset, type_, first, n) };
963        let isl_rs_result = match isl_rs_result {
964            0 => false,
965            1 => true,
966            _ => panic!("Got isl_bool = -1"),
967        };
968        isl_rs_result
969    }
970
971    /// Wraps `isl_basic_set_neg`.
972    pub fn neg(self) -> BasicSet {
973        let bset = self;
974        let mut bset = bset;
975        bset.do_not_free_on_drop();
976        let bset = bset.ptr;
977        let isl_rs_result = unsafe { isl_basic_set_neg(bset) };
978        let isl_rs_result = BasicSet { ptr: isl_rs_result,
979                                       should_free_on_drop: true };
980        isl_rs_result
981    }
982
983    /// Wraps `isl_basic_set_compute_divs`.
984    pub fn compute_divs(self) -> Set {
985        let bset = self;
986        let mut bset = bset;
987        bset.do_not_free_on_drop();
988        let bset = bset.ptr;
989        let isl_rs_result = unsafe { isl_basic_set_compute_divs(bset) };
990        let isl_rs_result = Set { ptr: isl_rs_result,
991                                  should_free_on_drop: true };
992        isl_rs_result
993    }
994
995    /// Wraps `isl_basic_set_gist`.
996    pub fn gist(self, context: BasicSet) -> BasicSet {
997        let bset = self;
998        let mut bset = bset;
999        bset.do_not_free_on_drop();
1000        let bset = bset.ptr;
1001        let mut context = context;
1002        context.do_not_free_on_drop();
1003        let context = context.ptr;
1004        let isl_rs_result = unsafe { isl_basic_set_gist(bset, context) };
1005        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1006                                       should_free_on_drop: true };
1007        isl_rs_result
1008    }
1009
1010    /// Wraps `isl_basic_set_from_point`.
1011    pub fn from_point(pnt: Point) -> BasicSet {
1012        let mut pnt = pnt;
1013        pnt.do_not_free_on_drop();
1014        let pnt = pnt.ptr;
1015        let isl_rs_result = unsafe { isl_basic_set_from_point(pnt) };
1016        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1017                                       should_free_on_drop: true };
1018        isl_rs_result
1019    }
1020
1021    /// Wraps `isl_basic_set_box_from_points`.
1022    pub fn box_from_points(pnt1: Point, pnt2: Point) -> BasicSet {
1023        let mut pnt1 = pnt1;
1024        pnt1.do_not_free_on_drop();
1025        let pnt1 = pnt1.ptr;
1026        let mut pnt2 = pnt2;
1027        pnt2.do_not_free_on_drop();
1028        let pnt2 = pnt2.ptr;
1029        let isl_rs_result = unsafe { isl_basic_set_box_from_points(pnt1, pnt2) };
1030        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1031                                       should_free_on_drop: true };
1032        isl_rs_result
1033    }
1034
1035    /// Wraps `isl_basic_set_lift`.
1036    pub fn lift(self) -> BasicSet {
1037        let bset = self;
1038        let mut bset = bset;
1039        bset.do_not_free_on_drop();
1040        let bset = bset.ptr;
1041        let isl_rs_result = unsafe { isl_basic_set_lift(bset) };
1042        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1043                                       should_free_on_drop: true };
1044        isl_rs_result
1045    }
1046
1047    /// Wraps `isl_basic_set_align_params`.
1048    pub fn align_params(self, model: Space) -> BasicSet {
1049        let bset = self;
1050        let mut bset = bset;
1051        bset.do_not_free_on_drop();
1052        let bset = bset.ptr;
1053        let mut model = model;
1054        model.do_not_free_on_drop();
1055        let model = model.ptr;
1056        let isl_rs_result = unsafe { isl_basic_set_align_params(bset, model) };
1057        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1058                                       should_free_on_drop: true };
1059        isl_rs_result
1060    }
1061
1062    /// Wraps `isl_basic_set_drop_unused_params`.
1063    pub fn drop_unused_params(self) -> BasicSet {
1064        let bset = self;
1065        let mut bset = bset;
1066        bset.do_not_free_on_drop();
1067        let bset = bset.ptr;
1068        let isl_rs_result = unsafe { isl_basic_set_drop_unused_params(bset) };
1069        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1070                                       should_free_on_drop: true };
1071        isl_rs_result
1072    }
1073
1074    /// Wraps `isl_basic_set_equalities_matrix`.
1075    pub fn equalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType) -> Mat {
1076        let bset = self;
1077        let bset = bset.ptr;
1078        let isl_rs_result = unsafe { isl_basic_set_equalities_matrix(bset, c1, c2, c3, c4) };
1079        let isl_rs_result = Mat { ptr: isl_rs_result,
1080                                  should_free_on_drop: true };
1081        isl_rs_result
1082    }
1083
1084    /// Wraps `isl_basic_set_inequalities_matrix`.
1085    pub fn inequalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType) -> Mat {
1086        let bset = self;
1087        let bset = bset.ptr;
1088        let isl_rs_result = unsafe { isl_basic_set_inequalities_matrix(bset, c1, c2, c3, c4) };
1089        let isl_rs_result = Mat { ptr: isl_rs_result,
1090                                  should_free_on_drop: true };
1091        isl_rs_result
1092    }
1093
1094    /// Wraps `isl_basic_set_from_constraint_matrices`.
1095    pub fn from_constraint_matrices(space: Space, eq: Mat, ineq: Mat, c1: DimType, c2: DimType,
1096                                    c3: DimType, c4: DimType)
1097                                    -> BasicSet {
1098        let mut space = space;
1099        space.do_not_free_on_drop();
1100        let space = space.ptr;
1101        let mut eq = eq;
1102        eq.do_not_free_on_drop();
1103        let eq = eq.ptr;
1104        let mut ineq = ineq;
1105        ineq.do_not_free_on_drop();
1106        let ineq = ineq.ptr;
1107        let isl_rs_result =
1108            unsafe { isl_basic_set_from_constraint_matrices(space, eq, ineq, c1, c2, c3, c4) };
1109        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1110                                       should_free_on_drop: true };
1111        isl_rs_result
1112    }
1113
1114    /// Wraps `isl_basic_set_reduced_basis`.
1115    pub fn reduced_basis(&self) -> Mat {
1116        let bset = self;
1117        let bset = bset.ptr;
1118        let isl_rs_result = unsafe { isl_basic_set_reduced_basis(bset) };
1119        let isl_rs_result = Mat { ptr: isl_rs_result,
1120                                  should_free_on_drop: true };
1121        isl_rs_result
1122    }
1123
1124    /// Wraps `isl_basic_set_coefficients`.
1125    pub fn coefficients(self) -> BasicSet {
1126        let bset = self;
1127        let mut bset = bset;
1128        bset.do_not_free_on_drop();
1129        let bset = bset.ptr;
1130        let isl_rs_result = unsafe { isl_basic_set_coefficients(bset) };
1131        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1132                                       should_free_on_drop: true };
1133        isl_rs_result
1134    }
1135
1136    /// Wraps `isl_basic_set_solutions`.
1137    pub fn solutions(self) -> BasicSet {
1138        let bset = self;
1139        let mut bset = bset;
1140        bset.do_not_free_on_drop();
1141        let bset = bset.ptr;
1142        let isl_rs_result = unsafe { isl_basic_set_solutions(bset) };
1143        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1144                                       should_free_on_drop: true };
1145        isl_rs_result
1146    }
1147
1148    /// Wraps `isl_basic_set_to_str`.
1149    pub fn to_str(&self) -> &str {
1150        let bset = self;
1151        let bset = bset.ptr;
1152        let isl_rs_result = unsafe { isl_basic_set_to_str(bset) };
1153        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1154        let isl_rs_result = isl_rs_result.to_str().unwrap();
1155        isl_rs_result
1156    }
1157
1158    /// Does not call isl_xxx_free() on being dropped. (For internal use only.)
1159    pub fn do_not_free_on_drop(&mut self) {
1160        self.should_free_on_drop = false;
1161    }
1162}
1163
1164impl Drop for BasicSet {
1165    fn drop(&mut self) {
1166        if self.should_free_on_drop {
1167            unsafe {
1168                isl_basic_set_free(self.ptr);
1169            }
1170        }
1171    }
1172}