isl_rs/bindings/
union_pw_aff.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Aff, Context, DimType, Error, Id, LibISLError, PwAff, PwAffList, Set, Space, UnionPwAffList,
6    UnionPwMultiAff, UnionSet, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12/// Wraps `isl_union_pw_aff`.
13pub struct UnionPwAff {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_union_pw_aff_add(upa1: uintptr_t, upa2: uintptr_t) -> uintptr_t;
21
22    fn isl_union_pw_aff_add_pw_aff(upa: uintptr_t, pa: uintptr_t) -> uintptr_t;
23
24    fn isl_union_pw_aff_aff_on_domain(domain: uintptr_t, aff: uintptr_t) -> uintptr_t;
25
26    fn isl_union_pw_aff_align_params(upa: uintptr_t, model: uintptr_t) -> uintptr_t;
27
28    fn isl_union_pw_aff_bind_id(upa: uintptr_t, id: uintptr_t) -> uintptr_t;
29
30    fn isl_union_pw_aff_coalesce(upa: uintptr_t) -> uintptr_t;
31
32    fn isl_union_pw_aff_copy(upa: uintptr_t) -> uintptr_t;
33
34    fn isl_union_pw_aff_dim(upa: uintptr_t, type_: i32) -> i32;
35
36    fn isl_union_pw_aff_domain(upa: uintptr_t) -> uintptr_t;
37
38    fn isl_union_pw_aff_drop_dims(upa: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
39
40    fn isl_union_pw_aff_drop_unused_params(upa: uintptr_t) -> uintptr_t;
41
42    fn isl_union_pw_aff_dump(upa: uintptr_t) -> ();
43
44    fn isl_union_pw_aff_empty(space: uintptr_t) -> uintptr_t;
45
46    fn isl_union_pw_aff_empty_ctx(ctx: uintptr_t) -> uintptr_t;
47
48    fn isl_union_pw_aff_empty_space(space: uintptr_t) -> uintptr_t;
49
50    fn isl_union_pw_aff_extract_pw_aff(upa: uintptr_t, space: uintptr_t) -> uintptr_t;
51
52    fn isl_union_pw_aff_find_dim_by_name(upa: uintptr_t, type_: i32, name: *const c_char) -> i32;
53
54    fn isl_union_pw_aff_floor(upa: uintptr_t) -> uintptr_t;
55
56    fn isl_union_pw_aff_free(upa: uintptr_t) -> uintptr_t;
57
58    fn isl_union_pw_aff_from_aff(aff: uintptr_t) -> uintptr_t;
59
60    fn isl_union_pw_aff_from_pw_aff(pa: uintptr_t) -> uintptr_t;
61
62    fn isl_union_pw_aff_get_ctx(upa: uintptr_t) -> uintptr_t;
63
64    fn isl_union_pw_aff_get_pw_aff_list(upa: uintptr_t) -> uintptr_t;
65
66    fn isl_union_pw_aff_get_space(upa: uintptr_t) -> uintptr_t;
67
68    fn isl_union_pw_aff_gist(upa: uintptr_t, context: uintptr_t) -> uintptr_t;
69
70    fn isl_union_pw_aff_gist_params(upa: uintptr_t, context: uintptr_t) -> uintptr_t;
71
72    fn isl_union_pw_aff_intersect_domain(upa: uintptr_t, uset: uintptr_t) -> uintptr_t;
73
74    fn isl_union_pw_aff_intersect_domain_space(upa: uintptr_t, space: uintptr_t) -> uintptr_t;
75
76    fn isl_union_pw_aff_intersect_domain_union_set(upa: uintptr_t, uset: uintptr_t) -> uintptr_t;
77
78    fn isl_union_pw_aff_intersect_domain_wrapped_domain(upa: uintptr_t, uset: uintptr_t)
79                                                        -> uintptr_t;
80
81    fn isl_union_pw_aff_intersect_domain_wrapped_range(upa: uintptr_t, uset: uintptr_t)
82                                                       -> uintptr_t;
83
84    fn isl_union_pw_aff_intersect_params(upa: uintptr_t, set: uintptr_t) -> uintptr_t;
85
86    fn isl_union_pw_aff_involves_nan(upa: uintptr_t) -> i32;
87
88    fn isl_union_pw_aff_max_val(upa: uintptr_t) -> uintptr_t;
89
90    fn isl_union_pw_aff_min_val(upa: uintptr_t) -> uintptr_t;
91
92    fn isl_union_pw_aff_mod_val(upa: uintptr_t, f: uintptr_t) -> uintptr_t;
93
94    fn isl_union_pw_aff_n_pw_aff(upa: uintptr_t) -> i32;
95
96    fn isl_union_pw_aff_neg(upa: uintptr_t) -> uintptr_t;
97
98    fn isl_union_pw_aff_param_on_domain_id(domain: uintptr_t, id: uintptr_t) -> uintptr_t;
99
100    fn isl_union_pw_aff_plain_is_equal(upa1: uintptr_t, upa2: uintptr_t) -> i32;
101
102    fn isl_union_pw_aff_pullback_union_pw_multi_aff(upa: uintptr_t, upma: uintptr_t) -> uintptr_t;
103
104    fn isl_union_pw_aff_pw_aff_on_domain(domain: uintptr_t, pa: uintptr_t) -> uintptr_t;
105
106    fn isl_union_pw_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
107
108    fn isl_union_pw_aff_reset_user(upa: uintptr_t) -> uintptr_t;
109
110    fn isl_union_pw_aff_scale_down_val(upa: uintptr_t, v: uintptr_t) -> uintptr_t;
111
112    fn isl_union_pw_aff_scale_val(upa: uintptr_t, v: uintptr_t) -> uintptr_t;
113
114    fn isl_union_pw_aff_set_dim_name(upa: uintptr_t, type_: i32, pos: u32, s: *const c_char)
115                                     -> uintptr_t;
116
117    fn isl_union_pw_aff_sub(upa1: uintptr_t, upa2: uintptr_t) -> uintptr_t;
118
119    fn isl_union_pw_aff_subtract_domain(upa: uintptr_t, uset: uintptr_t) -> uintptr_t;
120
121    fn isl_union_pw_aff_subtract_domain_space(upa: uintptr_t, space: uintptr_t) -> uintptr_t;
122
123    fn isl_union_pw_aff_subtract_domain_union_set(upa: uintptr_t, uset: uintptr_t) -> uintptr_t;
124
125    fn isl_union_pw_aff_to_list(el: uintptr_t) -> uintptr_t;
126
127    fn isl_union_pw_aff_to_str(upa: uintptr_t) -> *const c_char;
128
129    fn isl_union_pw_aff_union_add(upa1: uintptr_t, upa2: uintptr_t) -> uintptr_t;
130
131    fn isl_union_pw_aff_val_on_domain(domain: uintptr_t, v: uintptr_t) -> uintptr_t;
132
133    fn isl_union_pw_aff_zero_union_set(upa: uintptr_t) -> uintptr_t;
134
135}
136
137impl UnionPwAff {
138    /// Wraps `isl_union_pw_aff_add`.
139    pub fn add(self, upa2: UnionPwAff) -> Result<UnionPwAff, LibISLError> {
140        let upa1 = self;
141        let isl_rs_ctx = upa1.get_ctx();
142        let mut upa1 = upa1;
143        upa1.do_not_free_on_drop();
144        let upa1 = upa1.ptr;
145        let mut upa2 = upa2;
146        upa2.do_not_free_on_drop();
147        let upa2 = upa2.ptr;
148        let isl_rs_result = unsafe { isl_union_pw_aff_add(upa1, upa2) };
149        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
150                                         should_free_on_drop: true };
151        let err = isl_rs_ctx.last_error();
152        if err != Error::None_ {
153            let err_msg = isl_rs_ctx.last_error_msg();
154            isl_rs_ctx.reset_error();
155            return Err(LibISLError::new(err, err_msg));
156        }
157        Ok(isl_rs_result)
158    }
159
160    /// Wraps `isl_union_pw_aff_add_pw_aff`.
161    pub fn add_pw_aff(self, pa: PwAff) -> Result<UnionPwAff, LibISLError> {
162        let upa = self;
163        let isl_rs_ctx = upa.get_ctx();
164        let mut upa = upa;
165        upa.do_not_free_on_drop();
166        let upa = upa.ptr;
167        let mut pa = pa;
168        pa.do_not_free_on_drop();
169        let pa = pa.ptr;
170        let isl_rs_result = unsafe { isl_union_pw_aff_add_pw_aff(upa, pa) };
171        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
172                                         should_free_on_drop: true };
173        let err = isl_rs_ctx.last_error();
174        if err != Error::None_ {
175            let err_msg = isl_rs_ctx.last_error_msg();
176            isl_rs_ctx.reset_error();
177            return Err(LibISLError::new(err, err_msg));
178        }
179        Ok(isl_rs_result)
180    }
181
182    /// Wraps `isl_union_pw_aff_aff_on_domain`.
183    pub fn aff_on_domain(domain: UnionSet, aff: Aff) -> Result<UnionPwAff, LibISLError> {
184        let isl_rs_ctx = domain.get_ctx();
185        let mut domain = domain;
186        domain.do_not_free_on_drop();
187        let domain = domain.ptr;
188        let mut aff = aff;
189        aff.do_not_free_on_drop();
190        let aff = aff.ptr;
191        let isl_rs_result = unsafe { isl_union_pw_aff_aff_on_domain(domain, aff) };
192        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
193                                         should_free_on_drop: true };
194        let err = isl_rs_ctx.last_error();
195        if err != Error::None_ {
196            let err_msg = isl_rs_ctx.last_error_msg();
197            isl_rs_ctx.reset_error();
198            return Err(LibISLError::new(err, err_msg));
199        }
200        Ok(isl_rs_result)
201    }
202
203    /// Wraps `isl_union_pw_aff_align_params`.
204    pub fn align_params(self, model: Space) -> Result<UnionPwAff, LibISLError> {
205        let upa = self;
206        let isl_rs_ctx = upa.get_ctx();
207        let mut upa = upa;
208        upa.do_not_free_on_drop();
209        let upa = upa.ptr;
210        let mut model = model;
211        model.do_not_free_on_drop();
212        let model = model.ptr;
213        let isl_rs_result = unsafe { isl_union_pw_aff_align_params(upa, model) };
214        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
215                                         should_free_on_drop: true };
216        let err = isl_rs_ctx.last_error();
217        if err != Error::None_ {
218            let err_msg = isl_rs_ctx.last_error_msg();
219            isl_rs_ctx.reset_error();
220            return Err(LibISLError::new(err, err_msg));
221        }
222        Ok(isl_rs_result)
223    }
224
225    /// Wraps `isl_union_pw_aff_bind_id`.
226    pub fn bind_id(self, id: Id) -> Result<UnionSet, LibISLError> {
227        let upa = self;
228        let isl_rs_ctx = upa.get_ctx();
229        let mut upa = upa;
230        upa.do_not_free_on_drop();
231        let upa = upa.ptr;
232        let mut id = id;
233        id.do_not_free_on_drop();
234        let id = id.ptr;
235        let isl_rs_result = unsafe { isl_union_pw_aff_bind_id(upa, id) };
236        let isl_rs_result = UnionSet { ptr: isl_rs_result,
237                                       should_free_on_drop: true };
238        let err = isl_rs_ctx.last_error();
239        if err != Error::None_ {
240            let err_msg = isl_rs_ctx.last_error_msg();
241            isl_rs_ctx.reset_error();
242            return Err(LibISLError::new(err, err_msg));
243        }
244        Ok(isl_rs_result)
245    }
246
247    /// Wraps `isl_union_pw_aff_coalesce`.
248    pub fn coalesce(self) -> Result<UnionPwAff, LibISLError> {
249        let upa = self;
250        let isl_rs_ctx = upa.get_ctx();
251        let mut upa = upa;
252        upa.do_not_free_on_drop();
253        let upa = upa.ptr;
254        let isl_rs_result = unsafe { isl_union_pw_aff_coalesce(upa) };
255        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
256                                         should_free_on_drop: true };
257        let err = isl_rs_ctx.last_error();
258        if err != Error::None_ {
259            let err_msg = isl_rs_ctx.last_error_msg();
260            isl_rs_ctx.reset_error();
261            return Err(LibISLError::new(err, err_msg));
262        }
263        Ok(isl_rs_result)
264    }
265
266    /// Wraps `isl_union_pw_aff_copy`.
267    pub fn copy(&self) -> Result<UnionPwAff, LibISLError> {
268        let upa = self;
269        let isl_rs_ctx = upa.get_ctx();
270        let upa = upa.ptr;
271        let isl_rs_result = unsafe { isl_union_pw_aff_copy(upa) };
272        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
273                                         should_free_on_drop: true };
274        let err = isl_rs_ctx.last_error();
275        if err != Error::None_ {
276            let err_msg = isl_rs_ctx.last_error_msg();
277            isl_rs_ctx.reset_error();
278            return Err(LibISLError::new(err, err_msg));
279        }
280        Ok(isl_rs_result)
281    }
282
283    /// Wraps `isl_union_pw_aff_dim`.
284    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
285        let upa = self;
286        let isl_rs_ctx = upa.get_ctx();
287        let upa = upa.ptr;
288        let type_ = type_.to_i32();
289        let isl_rs_result = unsafe { isl_union_pw_aff_dim(upa, type_) };
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    /// Wraps `isl_union_pw_aff_domain`.
300    pub fn domain(self) -> Result<UnionSet, LibISLError> {
301        let upa = self;
302        let isl_rs_ctx = upa.get_ctx();
303        let mut upa = upa;
304        upa.do_not_free_on_drop();
305        let upa = upa.ptr;
306        let isl_rs_result = unsafe { isl_union_pw_aff_domain(upa) };
307        let isl_rs_result = UnionSet { ptr: isl_rs_result,
308                                       should_free_on_drop: true };
309        let err = isl_rs_ctx.last_error();
310        if err != Error::None_ {
311            let err_msg = isl_rs_ctx.last_error_msg();
312            isl_rs_ctx.reset_error();
313            return Err(LibISLError::new(err, err_msg));
314        }
315        Ok(isl_rs_result)
316    }
317
318    /// Wraps `isl_union_pw_aff_drop_dims`.
319    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<UnionPwAff, LibISLError> {
320        let upa = self;
321        let isl_rs_ctx = upa.get_ctx();
322        let mut upa = upa;
323        upa.do_not_free_on_drop();
324        let upa = upa.ptr;
325        let type_ = type_.to_i32();
326        let isl_rs_result = unsafe { isl_union_pw_aff_drop_dims(upa, type_, first, n) };
327        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
328                                         should_free_on_drop: true };
329        let err = isl_rs_ctx.last_error();
330        if err != Error::None_ {
331            let err_msg = isl_rs_ctx.last_error_msg();
332            isl_rs_ctx.reset_error();
333            return Err(LibISLError::new(err, err_msg));
334        }
335        Ok(isl_rs_result)
336    }
337
338    /// Wraps `isl_union_pw_aff_drop_unused_params`.
339    pub fn drop_unused_params(self) -> Result<UnionPwAff, LibISLError> {
340        let upa = self;
341        let isl_rs_ctx = upa.get_ctx();
342        let mut upa = upa;
343        upa.do_not_free_on_drop();
344        let upa = upa.ptr;
345        let isl_rs_result = unsafe { isl_union_pw_aff_drop_unused_params(upa) };
346        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
347                                         should_free_on_drop: true };
348        let err = isl_rs_ctx.last_error();
349        if err != Error::None_ {
350            let err_msg = isl_rs_ctx.last_error_msg();
351            isl_rs_ctx.reset_error();
352            return Err(LibISLError::new(err, err_msg));
353        }
354        Ok(isl_rs_result)
355    }
356
357    /// Wraps `isl_union_pw_aff_dump`.
358    pub fn dump(&self) -> Result<(), LibISLError> {
359        let upa = self;
360        let isl_rs_ctx = upa.get_ctx();
361        let upa = upa.ptr;
362        let isl_rs_result = unsafe { isl_union_pw_aff_dump(upa) };
363        let err = isl_rs_ctx.last_error();
364        if err != Error::None_ {
365            let err_msg = isl_rs_ctx.last_error_msg();
366            isl_rs_ctx.reset_error();
367            return Err(LibISLError::new(err, err_msg));
368        }
369        Ok(isl_rs_result)
370    }
371
372    /// Wraps `isl_union_pw_aff_empty`.
373    pub fn empty(space: Space) -> Result<UnionPwAff, LibISLError> {
374        let isl_rs_ctx = space.get_ctx();
375        let mut space = space;
376        space.do_not_free_on_drop();
377        let space = space.ptr;
378        let isl_rs_result = unsafe { isl_union_pw_aff_empty(space) };
379        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
380                                         should_free_on_drop: true };
381        let err = isl_rs_ctx.last_error();
382        if err != Error::None_ {
383            let err_msg = isl_rs_ctx.last_error_msg();
384            isl_rs_ctx.reset_error();
385            return Err(LibISLError::new(err, err_msg));
386        }
387        Ok(isl_rs_result)
388    }
389
390    /// Wraps `isl_union_pw_aff_empty_ctx`.
391    pub fn empty_ctx(ctx: &Context) -> Result<UnionPwAff, LibISLError> {
392        let isl_rs_ctx = Context { ptr: ctx.ptr,
393                                   should_free_on_drop: false };
394        let ctx = ctx.ptr;
395        let isl_rs_result = unsafe { isl_union_pw_aff_empty_ctx(ctx) };
396        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
397                                         should_free_on_drop: true };
398        let err = isl_rs_ctx.last_error();
399        if err != Error::None_ {
400            let err_msg = isl_rs_ctx.last_error_msg();
401            isl_rs_ctx.reset_error();
402            return Err(LibISLError::new(err, err_msg));
403        }
404        Ok(isl_rs_result)
405    }
406
407    /// Wraps `isl_union_pw_aff_empty_space`.
408    pub fn empty_space(space: Space) -> Result<UnionPwAff, LibISLError> {
409        let isl_rs_ctx = space.get_ctx();
410        let mut space = space;
411        space.do_not_free_on_drop();
412        let space = space.ptr;
413        let isl_rs_result = unsafe { isl_union_pw_aff_empty_space(space) };
414        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
415                                         should_free_on_drop: true };
416        let err = isl_rs_ctx.last_error();
417        if err != Error::None_ {
418            let err_msg = isl_rs_ctx.last_error_msg();
419            isl_rs_ctx.reset_error();
420            return Err(LibISLError::new(err, err_msg));
421        }
422        Ok(isl_rs_result)
423    }
424
425    /// Wraps `isl_union_pw_aff_extract_pw_aff`.
426    pub fn extract_pw_aff(&self, space: Space) -> Result<PwAff, LibISLError> {
427        let upa = self;
428        let isl_rs_ctx = upa.get_ctx();
429        let upa = upa.ptr;
430        let mut space = space;
431        space.do_not_free_on_drop();
432        let space = space.ptr;
433        let isl_rs_result = unsafe { isl_union_pw_aff_extract_pw_aff(upa, space) };
434        let isl_rs_result = PwAff { ptr: isl_rs_result,
435                                    should_free_on_drop: true };
436        let err = isl_rs_ctx.last_error();
437        if err != Error::None_ {
438            let err_msg = isl_rs_ctx.last_error_msg();
439            isl_rs_ctx.reset_error();
440            return Err(LibISLError::new(err, err_msg));
441        }
442        Ok(isl_rs_result)
443    }
444
445    /// Wraps `isl_union_pw_aff_find_dim_by_name`.
446    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
447        let upa = self;
448        let isl_rs_ctx = upa.get_ctx();
449        let upa = upa.ptr;
450        let type_ = type_.to_i32();
451        let name = CString::new(name).unwrap();
452        let name = name.as_ptr();
453        let isl_rs_result = unsafe { isl_union_pw_aff_find_dim_by_name(upa, type_, name) };
454        let err = isl_rs_ctx.last_error();
455        if err != Error::None_ {
456            let err_msg = isl_rs_ctx.last_error_msg();
457            isl_rs_ctx.reset_error();
458            return Err(LibISLError::new(err, err_msg));
459        }
460        Ok(isl_rs_result)
461    }
462
463    /// Wraps `isl_union_pw_aff_floor`.
464    pub fn floor(self) -> Result<UnionPwAff, LibISLError> {
465        let upa = self;
466        let isl_rs_ctx = upa.get_ctx();
467        let mut upa = upa;
468        upa.do_not_free_on_drop();
469        let upa = upa.ptr;
470        let isl_rs_result = unsafe { isl_union_pw_aff_floor(upa) };
471        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
472                                         should_free_on_drop: true };
473        let err = isl_rs_ctx.last_error();
474        if err != Error::None_ {
475            let err_msg = isl_rs_ctx.last_error_msg();
476            isl_rs_ctx.reset_error();
477            return Err(LibISLError::new(err, err_msg));
478        }
479        Ok(isl_rs_result)
480    }
481
482    /// Wraps `isl_union_pw_aff_free`.
483    pub fn free(self) -> Result<UnionPwAff, LibISLError> {
484        let upa = self;
485        let isl_rs_ctx = upa.get_ctx();
486        let mut upa = upa;
487        upa.do_not_free_on_drop();
488        let upa = upa.ptr;
489        let isl_rs_result = unsafe { isl_union_pw_aff_free(upa) };
490        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
491                                         should_free_on_drop: true };
492        let err = isl_rs_ctx.last_error();
493        if err != Error::None_ {
494            let err_msg = isl_rs_ctx.last_error_msg();
495            isl_rs_ctx.reset_error();
496            return Err(LibISLError::new(err, err_msg));
497        }
498        Ok(isl_rs_result)
499    }
500
501    /// Wraps `isl_union_pw_aff_from_aff`.
502    pub fn from_aff(aff: Aff) -> Result<UnionPwAff, LibISLError> {
503        let isl_rs_ctx = aff.get_ctx();
504        let mut aff = aff;
505        aff.do_not_free_on_drop();
506        let aff = aff.ptr;
507        let isl_rs_result = unsafe { isl_union_pw_aff_from_aff(aff) };
508        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
509                                         should_free_on_drop: true };
510        let err = isl_rs_ctx.last_error();
511        if err != Error::None_ {
512            let err_msg = isl_rs_ctx.last_error_msg();
513            isl_rs_ctx.reset_error();
514            return Err(LibISLError::new(err, err_msg));
515        }
516        Ok(isl_rs_result)
517    }
518
519    /// Wraps `isl_union_pw_aff_from_pw_aff`.
520    pub fn from_pw_aff(pa: PwAff) -> Result<UnionPwAff, LibISLError> {
521        let isl_rs_ctx = pa.get_ctx();
522        let mut pa = pa;
523        pa.do_not_free_on_drop();
524        let pa = pa.ptr;
525        let isl_rs_result = unsafe { isl_union_pw_aff_from_pw_aff(pa) };
526        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
527                                         should_free_on_drop: true };
528        let err = isl_rs_ctx.last_error();
529        if err != Error::None_ {
530            let err_msg = isl_rs_ctx.last_error_msg();
531            isl_rs_ctx.reset_error();
532            return Err(LibISLError::new(err, err_msg));
533        }
534        Ok(isl_rs_result)
535    }
536
537    /// Wraps `isl_union_pw_aff_get_ctx`.
538    pub fn get_ctx(&self) -> Context {
539        let upa = self;
540        let upa = upa.ptr;
541        let isl_rs_result = unsafe { isl_union_pw_aff_get_ctx(upa) };
542        let isl_rs_result = Context { ptr: isl_rs_result,
543                                      should_free_on_drop: false };
544        isl_rs_result
545    }
546
547    /// Wraps `isl_union_pw_aff_get_pw_aff_list`.
548    pub fn get_pw_aff_list(&self) -> Result<PwAffList, LibISLError> {
549        let upa = self;
550        let isl_rs_ctx = upa.get_ctx();
551        let upa = upa.ptr;
552        let isl_rs_result = unsafe { isl_union_pw_aff_get_pw_aff_list(upa) };
553        let isl_rs_result = PwAffList { ptr: isl_rs_result,
554                                        should_free_on_drop: true };
555        let err = isl_rs_ctx.last_error();
556        if err != Error::None_ {
557            let err_msg = isl_rs_ctx.last_error_msg();
558            isl_rs_ctx.reset_error();
559            return Err(LibISLError::new(err, err_msg));
560        }
561        Ok(isl_rs_result)
562    }
563
564    /// Wraps `isl_union_pw_aff_get_space`.
565    pub fn get_space(&self) -> Result<Space, LibISLError> {
566        let upa = self;
567        let isl_rs_ctx = upa.get_ctx();
568        let upa = upa.ptr;
569        let isl_rs_result = unsafe { isl_union_pw_aff_get_space(upa) };
570        let isl_rs_result = Space { ptr: isl_rs_result,
571                                    should_free_on_drop: true };
572        let err = isl_rs_ctx.last_error();
573        if err != Error::None_ {
574            let err_msg = isl_rs_ctx.last_error_msg();
575            isl_rs_ctx.reset_error();
576            return Err(LibISLError::new(err, err_msg));
577        }
578        Ok(isl_rs_result)
579    }
580
581    /// Wraps `isl_union_pw_aff_gist`.
582    pub fn gist(self, context: UnionSet) -> Result<UnionPwAff, LibISLError> {
583        let upa = self;
584        let isl_rs_ctx = upa.get_ctx();
585        let mut upa = upa;
586        upa.do_not_free_on_drop();
587        let upa = upa.ptr;
588        let mut context = context;
589        context.do_not_free_on_drop();
590        let context = context.ptr;
591        let isl_rs_result = unsafe { isl_union_pw_aff_gist(upa, context) };
592        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
593                                         should_free_on_drop: true };
594        let err = isl_rs_ctx.last_error();
595        if err != Error::None_ {
596            let err_msg = isl_rs_ctx.last_error_msg();
597            isl_rs_ctx.reset_error();
598            return Err(LibISLError::new(err, err_msg));
599        }
600        Ok(isl_rs_result)
601    }
602
603    /// Wraps `isl_union_pw_aff_gist_params`.
604    pub fn gist_params(self, context: Set) -> Result<UnionPwAff, LibISLError> {
605        let upa = self;
606        let isl_rs_ctx = upa.get_ctx();
607        let mut upa = upa;
608        upa.do_not_free_on_drop();
609        let upa = upa.ptr;
610        let mut context = context;
611        context.do_not_free_on_drop();
612        let context = context.ptr;
613        let isl_rs_result = unsafe { isl_union_pw_aff_gist_params(upa, context) };
614        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
615                                         should_free_on_drop: true };
616        let err = isl_rs_ctx.last_error();
617        if err != Error::None_ {
618            let err_msg = isl_rs_ctx.last_error_msg();
619            isl_rs_ctx.reset_error();
620            return Err(LibISLError::new(err, err_msg));
621        }
622        Ok(isl_rs_result)
623    }
624
625    /// Wraps `isl_union_pw_aff_intersect_domain`.
626    pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
627        let upa = self;
628        let isl_rs_ctx = upa.get_ctx();
629        let mut upa = upa;
630        upa.do_not_free_on_drop();
631        let upa = upa.ptr;
632        let mut uset = uset;
633        uset.do_not_free_on_drop();
634        let uset = uset.ptr;
635        let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain(upa, uset) };
636        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
637                                         should_free_on_drop: true };
638        let err = isl_rs_ctx.last_error();
639        if err != Error::None_ {
640            let err_msg = isl_rs_ctx.last_error_msg();
641            isl_rs_ctx.reset_error();
642            return Err(LibISLError::new(err, err_msg));
643        }
644        Ok(isl_rs_result)
645    }
646
647    /// Wraps `isl_union_pw_aff_intersect_domain_space`.
648    pub fn intersect_domain_space(self, space: Space) -> Result<UnionPwAff, LibISLError> {
649        let upa = self;
650        let isl_rs_ctx = upa.get_ctx();
651        let mut upa = upa;
652        upa.do_not_free_on_drop();
653        let upa = upa.ptr;
654        let mut space = space;
655        space.do_not_free_on_drop();
656        let space = space.ptr;
657        let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain_space(upa, space) };
658        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
659                                         should_free_on_drop: true };
660        let err = isl_rs_ctx.last_error();
661        if err != Error::None_ {
662            let err_msg = isl_rs_ctx.last_error_msg();
663            isl_rs_ctx.reset_error();
664            return Err(LibISLError::new(err, err_msg));
665        }
666        Ok(isl_rs_result)
667    }
668
669    /// Wraps `isl_union_pw_aff_intersect_domain_union_set`.
670    pub fn intersect_domain_union_set(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
671        let upa = self;
672        let isl_rs_ctx = upa.get_ctx();
673        let mut upa = upa;
674        upa.do_not_free_on_drop();
675        let upa = upa.ptr;
676        let mut uset = uset;
677        uset.do_not_free_on_drop();
678        let uset = uset.ptr;
679        let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain_union_set(upa, uset) };
680        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
681                                         should_free_on_drop: true };
682        let err = isl_rs_ctx.last_error();
683        if err != Error::None_ {
684            let err_msg = isl_rs_ctx.last_error_msg();
685            isl_rs_ctx.reset_error();
686            return Err(LibISLError::new(err, err_msg));
687        }
688        Ok(isl_rs_result)
689    }
690
691    /// Wraps `isl_union_pw_aff_intersect_domain_wrapped_domain`.
692    pub fn intersect_domain_wrapped_domain(self, uset: UnionSet)
693                                           -> Result<UnionPwAff, LibISLError> {
694        let upa = self;
695        let isl_rs_ctx = upa.get_ctx();
696        let mut upa = upa;
697        upa.do_not_free_on_drop();
698        let upa = upa.ptr;
699        let mut uset = uset;
700        uset.do_not_free_on_drop();
701        let uset = uset.ptr;
702        let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain_wrapped_domain(upa, uset) };
703        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
704                                         should_free_on_drop: true };
705        let err = isl_rs_ctx.last_error();
706        if err != Error::None_ {
707            let err_msg = isl_rs_ctx.last_error_msg();
708            isl_rs_ctx.reset_error();
709            return Err(LibISLError::new(err, err_msg));
710        }
711        Ok(isl_rs_result)
712    }
713
714    /// Wraps `isl_union_pw_aff_intersect_domain_wrapped_range`.
715    pub fn intersect_domain_wrapped_range(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
716        let upa = self;
717        let isl_rs_ctx = upa.get_ctx();
718        let mut upa = upa;
719        upa.do_not_free_on_drop();
720        let upa = upa.ptr;
721        let mut uset = uset;
722        uset.do_not_free_on_drop();
723        let uset = uset.ptr;
724        let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain_wrapped_range(upa, uset) };
725        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
726                                         should_free_on_drop: true };
727        let err = isl_rs_ctx.last_error();
728        if err != Error::None_ {
729            let err_msg = isl_rs_ctx.last_error_msg();
730            isl_rs_ctx.reset_error();
731            return Err(LibISLError::new(err, err_msg));
732        }
733        Ok(isl_rs_result)
734    }
735
736    /// Wraps `isl_union_pw_aff_intersect_params`.
737    pub fn intersect_params(self, set: Set) -> Result<UnionPwAff, LibISLError> {
738        let upa = self;
739        let isl_rs_ctx = upa.get_ctx();
740        let mut upa = upa;
741        upa.do_not_free_on_drop();
742        let upa = upa.ptr;
743        let mut set = set;
744        set.do_not_free_on_drop();
745        let set = set.ptr;
746        let isl_rs_result = unsafe { isl_union_pw_aff_intersect_params(upa, set) };
747        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
748                                         should_free_on_drop: true };
749        let err = isl_rs_ctx.last_error();
750        if err != Error::None_ {
751            let err_msg = isl_rs_ctx.last_error_msg();
752            isl_rs_ctx.reset_error();
753            return Err(LibISLError::new(err, err_msg));
754        }
755        Ok(isl_rs_result)
756    }
757
758    /// Wraps `isl_union_pw_aff_involves_nan`.
759    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
760        let upa = self;
761        let isl_rs_ctx = upa.get_ctx();
762        let upa = upa.ptr;
763        let isl_rs_result = unsafe { isl_union_pw_aff_involves_nan(upa) };
764        let isl_rs_result = match isl_rs_result {
765            0 => false,
766            1 => true,
767            _ => {
768                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
769            }
770        };
771        let err = isl_rs_ctx.last_error();
772        if err != Error::None_ {
773            let err_msg = isl_rs_ctx.last_error_msg();
774            isl_rs_ctx.reset_error();
775            return Err(LibISLError::new(err, err_msg));
776        }
777        Ok(isl_rs_result)
778    }
779
780    /// Wraps `isl_union_pw_aff_max_val`.
781    pub fn max_val(self) -> Result<Val, LibISLError> {
782        let upa = self;
783        let isl_rs_ctx = upa.get_ctx();
784        let mut upa = upa;
785        upa.do_not_free_on_drop();
786        let upa = upa.ptr;
787        let isl_rs_result = unsafe { isl_union_pw_aff_max_val(upa) };
788        let isl_rs_result = Val { ptr: isl_rs_result,
789                                  should_free_on_drop: true };
790        let err = isl_rs_ctx.last_error();
791        if err != Error::None_ {
792            let err_msg = isl_rs_ctx.last_error_msg();
793            isl_rs_ctx.reset_error();
794            return Err(LibISLError::new(err, err_msg));
795        }
796        Ok(isl_rs_result)
797    }
798
799    /// Wraps `isl_union_pw_aff_min_val`.
800    pub fn min_val(self) -> Result<Val, LibISLError> {
801        let upa = self;
802        let isl_rs_ctx = upa.get_ctx();
803        let mut upa = upa;
804        upa.do_not_free_on_drop();
805        let upa = upa.ptr;
806        let isl_rs_result = unsafe { isl_union_pw_aff_min_val(upa) };
807        let isl_rs_result = Val { ptr: isl_rs_result,
808                                  should_free_on_drop: true };
809        let err = isl_rs_ctx.last_error();
810        if err != Error::None_ {
811            let err_msg = isl_rs_ctx.last_error_msg();
812            isl_rs_ctx.reset_error();
813            return Err(LibISLError::new(err, err_msg));
814        }
815        Ok(isl_rs_result)
816    }
817
818    /// Wraps `isl_union_pw_aff_mod_val`.
819    pub fn mod_val(self, f: Val) -> Result<UnionPwAff, LibISLError> {
820        let upa = self;
821        let isl_rs_ctx = upa.get_ctx();
822        let mut upa = upa;
823        upa.do_not_free_on_drop();
824        let upa = upa.ptr;
825        let mut f = f;
826        f.do_not_free_on_drop();
827        let f = f.ptr;
828        let isl_rs_result = unsafe { isl_union_pw_aff_mod_val(upa, f) };
829        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
830                                         should_free_on_drop: true };
831        let err = isl_rs_ctx.last_error();
832        if err != Error::None_ {
833            let err_msg = isl_rs_ctx.last_error_msg();
834            isl_rs_ctx.reset_error();
835            return Err(LibISLError::new(err, err_msg));
836        }
837        Ok(isl_rs_result)
838    }
839
840    /// Wraps `isl_union_pw_aff_n_pw_aff`.
841    pub fn n_pw_aff(&self) -> Result<i32, LibISLError> {
842        let upa = self;
843        let isl_rs_ctx = upa.get_ctx();
844        let upa = upa.ptr;
845        let isl_rs_result = unsafe { isl_union_pw_aff_n_pw_aff(upa) };
846        let err = isl_rs_ctx.last_error();
847        if err != Error::None_ {
848            let err_msg = isl_rs_ctx.last_error_msg();
849            isl_rs_ctx.reset_error();
850            return Err(LibISLError::new(err, err_msg));
851        }
852        Ok(isl_rs_result)
853    }
854
855    /// Wraps `isl_union_pw_aff_neg`.
856    pub fn neg(self) -> Result<UnionPwAff, LibISLError> {
857        let upa = self;
858        let isl_rs_ctx = upa.get_ctx();
859        let mut upa = upa;
860        upa.do_not_free_on_drop();
861        let upa = upa.ptr;
862        let isl_rs_result = unsafe { isl_union_pw_aff_neg(upa) };
863        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
864                                         should_free_on_drop: true };
865        let err = isl_rs_ctx.last_error();
866        if err != Error::None_ {
867            let err_msg = isl_rs_ctx.last_error_msg();
868            isl_rs_ctx.reset_error();
869            return Err(LibISLError::new(err, err_msg));
870        }
871        Ok(isl_rs_result)
872    }
873
874    /// Wraps `isl_union_pw_aff_param_on_domain_id`.
875    pub fn param_on_domain_id(domain: UnionSet, id: Id) -> Result<UnionPwAff, LibISLError> {
876        let isl_rs_ctx = domain.get_ctx();
877        let mut domain = domain;
878        domain.do_not_free_on_drop();
879        let domain = domain.ptr;
880        let mut id = id;
881        id.do_not_free_on_drop();
882        let id = id.ptr;
883        let isl_rs_result = unsafe { isl_union_pw_aff_param_on_domain_id(domain, id) };
884        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
885                                         should_free_on_drop: true };
886        let err = isl_rs_ctx.last_error();
887        if err != Error::None_ {
888            let err_msg = isl_rs_ctx.last_error_msg();
889            isl_rs_ctx.reset_error();
890            return Err(LibISLError::new(err, err_msg));
891        }
892        Ok(isl_rs_result)
893    }
894
895    /// Wraps `isl_union_pw_aff_plain_is_equal`.
896    pub fn plain_is_equal(&self, upa2: &UnionPwAff) -> Result<bool, LibISLError> {
897        let upa1 = self;
898        let isl_rs_ctx = upa1.get_ctx();
899        let upa1 = upa1.ptr;
900        let upa2 = upa2.ptr;
901        let isl_rs_result = unsafe { isl_union_pw_aff_plain_is_equal(upa1, upa2) };
902        let isl_rs_result = match isl_rs_result {
903            0 => false,
904            1 => true,
905            _ => {
906                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
907            }
908        };
909        let err = isl_rs_ctx.last_error();
910        if err != Error::None_ {
911            let err_msg = isl_rs_ctx.last_error_msg();
912            isl_rs_ctx.reset_error();
913            return Err(LibISLError::new(err, err_msg));
914        }
915        Ok(isl_rs_result)
916    }
917
918    /// Wraps `isl_union_pw_aff_pullback_union_pw_multi_aff`.
919    pub fn pullback_union_pw_multi_aff(self, upma: UnionPwMultiAff)
920                                       -> Result<UnionPwAff, LibISLError> {
921        let upa = self;
922        let isl_rs_ctx = upa.get_ctx();
923        let mut upa = upa;
924        upa.do_not_free_on_drop();
925        let upa = upa.ptr;
926        let mut upma = upma;
927        upma.do_not_free_on_drop();
928        let upma = upma.ptr;
929        let isl_rs_result = unsafe { isl_union_pw_aff_pullback_union_pw_multi_aff(upa, upma) };
930        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
931                                         should_free_on_drop: true };
932        let err = isl_rs_ctx.last_error();
933        if err != Error::None_ {
934            let err_msg = isl_rs_ctx.last_error_msg();
935            isl_rs_ctx.reset_error();
936            return Err(LibISLError::new(err, err_msg));
937        }
938        Ok(isl_rs_result)
939    }
940
941    /// Wraps `isl_union_pw_aff_pw_aff_on_domain`.
942    pub fn pw_aff_on_domain(domain: UnionSet, pa: PwAff) -> Result<UnionPwAff, LibISLError> {
943        let isl_rs_ctx = domain.get_ctx();
944        let mut domain = domain;
945        domain.do_not_free_on_drop();
946        let domain = domain.ptr;
947        let mut pa = pa;
948        pa.do_not_free_on_drop();
949        let pa = pa.ptr;
950        let isl_rs_result = unsafe { isl_union_pw_aff_pw_aff_on_domain(domain, pa) };
951        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
952                                         should_free_on_drop: true };
953        let err = isl_rs_ctx.last_error();
954        if err != Error::None_ {
955            let err_msg = isl_rs_ctx.last_error_msg();
956            isl_rs_ctx.reset_error();
957            return Err(LibISLError::new(err, err_msg));
958        }
959        Ok(isl_rs_result)
960    }
961
962    /// Wraps `isl_union_pw_aff_read_from_str`.
963    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionPwAff, LibISLError> {
964        let isl_rs_ctx = Context { ptr: ctx.ptr,
965                                   should_free_on_drop: false };
966        let ctx = ctx.ptr;
967        let str_ = CString::new(str_).unwrap();
968        let str_ = str_.as_ptr();
969        let isl_rs_result = unsafe { isl_union_pw_aff_read_from_str(ctx, str_) };
970        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
971                                         should_free_on_drop: true };
972        let err = isl_rs_ctx.last_error();
973        if err != Error::None_ {
974            let err_msg = isl_rs_ctx.last_error_msg();
975            isl_rs_ctx.reset_error();
976            return Err(LibISLError::new(err, err_msg));
977        }
978        Ok(isl_rs_result)
979    }
980
981    /// Wraps `isl_union_pw_aff_reset_user`.
982    pub fn reset_user(self) -> Result<UnionPwAff, LibISLError> {
983        let upa = self;
984        let isl_rs_ctx = upa.get_ctx();
985        let mut upa = upa;
986        upa.do_not_free_on_drop();
987        let upa = upa.ptr;
988        let isl_rs_result = unsafe { isl_union_pw_aff_reset_user(upa) };
989        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
990                                         should_free_on_drop: true };
991        let err = isl_rs_ctx.last_error();
992        if err != Error::None_ {
993            let err_msg = isl_rs_ctx.last_error_msg();
994            isl_rs_ctx.reset_error();
995            return Err(LibISLError::new(err, err_msg));
996        }
997        Ok(isl_rs_result)
998    }
999
1000    /// Wraps `isl_union_pw_aff_scale_down_val`.
1001    pub fn scale_down_val(self, v: Val) -> Result<UnionPwAff, LibISLError> {
1002        let upa = self;
1003        let isl_rs_ctx = upa.get_ctx();
1004        let mut upa = upa;
1005        upa.do_not_free_on_drop();
1006        let upa = upa.ptr;
1007        let mut v = v;
1008        v.do_not_free_on_drop();
1009        let v = v.ptr;
1010        let isl_rs_result = unsafe { isl_union_pw_aff_scale_down_val(upa, v) };
1011        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1012                                         should_free_on_drop: true };
1013        let err = isl_rs_ctx.last_error();
1014        if err != Error::None_ {
1015            let err_msg = isl_rs_ctx.last_error_msg();
1016            isl_rs_ctx.reset_error();
1017            return Err(LibISLError::new(err, err_msg));
1018        }
1019        Ok(isl_rs_result)
1020    }
1021
1022    /// Wraps `isl_union_pw_aff_scale_val`.
1023    pub fn scale_val(self, v: Val) -> Result<UnionPwAff, LibISLError> {
1024        let upa = self;
1025        let isl_rs_ctx = upa.get_ctx();
1026        let mut upa = upa;
1027        upa.do_not_free_on_drop();
1028        let upa = upa.ptr;
1029        let mut v = v;
1030        v.do_not_free_on_drop();
1031        let v = v.ptr;
1032        let isl_rs_result = unsafe { isl_union_pw_aff_scale_val(upa, v) };
1033        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1034                                         should_free_on_drop: true };
1035        let err = isl_rs_ctx.last_error();
1036        if err != Error::None_ {
1037            let err_msg = isl_rs_ctx.last_error_msg();
1038            isl_rs_ctx.reset_error();
1039            return Err(LibISLError::new(err, err_msg));
1040        }
1041        Ok(isl_rs_result)
1042    }
1043
1044    /// Wraps `isl_union_pw_aff_set_dim_name`.
1045    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1046                        -> Result<UnionPwAff, LibISLError> {
1047        let upa = self;
1048        let isl_rs_ctx = upa.get_ctx();
1049        let mut upa = upa;
1050        upa.do_not_free_on_drop();
1051        let upa = upa.ptr;
1052        let type_ = type_.to_i32();
1053        let s = CString::new(s).unwrap();
1054        let s = s.as_ptr();
1055        let isl_rs_result = unsafe { isl_union_pw_aff_set_dim_name(upa, type_, pos, s) };
1056        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1057                                         should_free_on_drop: true };
1058        let err = isl_rs_ctx.last_error();
1059        if err != Error::None_ {
1060            let err_msg = isl_rs_ctx.last_error_msg();
1061            isl_rs_ctx.reset_error();
1062            return Err(LibISLError::new(err, err_msg));
1063        }
1064        Ok(isl_rs_result)
1065    }
1066
1067    /// Wraps `isl_union_pw_aff_sub`.
1068    pub fn sub(self, upa2: UnionPwAff) -> Result<UnionPwAff, LibISLError> {
1069        let upa1 = self;
1070        let isl_rs_ctx = upa1.get_ctx();
1071        let mut upa1 = upa1;
1072        upa1.do_not_free_on_drop();
1073        let upa1 = upa1.ptr;
1074        let mut upa2 = upa2;
1075        upa2.do_not_free_on_drop();
1076        let upa2 = upa2.ptr;
1077        let isl_rs_result = unsafe { isl_union_pw_aff_sub(upa1, upa2) };
1078        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1079                                         should_free_on_drop: true };
1080        let err = isl_rs_ctx.last_error();
1081        if err != Error::None_ {
1082            let err_msg = isl_rs_ctx.last_error_msg();
1083            isl_rs_ctx.reset_error();
1084            return Err(LibISLError::new(err, err_msg));
1085        }
1086        Ok(isl_rs_result)
1087    }
1088
1089    /// Wraps `isl_union_pw_aff_subtract_domain`.
1090    pub fn subtract_domain(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
1091        let upa = self;
1092        let isl_rs_ctx = upa.get_ctx();
1093        let mut upa = upa;
1094        upa.do_not_free_on_drop();
1095        let upa = upa.ptr;
1096        let mut uset = uset;
1097        uset.do_not_free_on_drop();
1098        let uset = uset.ptr;
1099        let isl_rs_result = unsafe { isl_union_pw_aff_subtract_domain(upa, uset) };
1100        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1101                                         should_free_on_drop: true };
1102        let err = isl_rs_ctx.last_error();
1103        if err != Error::None_ {
1104            let err_msg = isl_rs_ctx.last_error_msg();
1105            isl_rs_ctx.reset_error();
1106            return Err(LibISLError::new(err, err_msg));
1107        }
1108        Ok(isl_rs_result)
1109    }
1110
1111    /// Wraps `isl_union_pw_aff_subtract_domain_space`.
1112    pub fn subtract_domain_space(self, space: Space) -> Result<UnionPwAff, LibISLError> {
1113        let upa = self;
1114        let isl_rs_ctx = upa.get_ctx();
1115        let mut upa = upa;
1116        upa.do_not_free_on_drop();
1117        let upa = upa.ptr;
1118        let mut space = space;
1119        space.do_not_free_on_drop();
1120        let space = space.ptr;
1121        let isl_rs_result = unsafe { isl_union_pw_aff_subtract_domain_space(upa, space) };
1122        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1123                                         should_free_on_drop: true };
1124        let err = isl_rs_ctx.last_error();
1125        if err != Error::None_ {
1126            let err_msg = isl_rs_ctx.last_error_msg();
1127            isl_rs_ctx.reset_error();
1128            return Err(LibISLError::new(err, err_msg));
1129        }
1130        Ok(isl_rs_result)
1131    }
1132
1133    /// Wraps `isl_union_pw_aff_subtract_domain_union_set`.
1134    pub fn subtract_domain_union_set(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
1135        let upa = self;
1136        let isl_rs_ctx = upa.get_ctx();
1137        let mut upa = upa;
1138        upa.do_not_free_on_drop();
1139        let upa = upa.ptr;
1140        let mut uset = uset;
1141        uset.do_not_free_on_drop();
1142        let uset = uset.ptr;
1143        let isl_rs_result = unsafe { isl_union_pw_aff_subtract_domain_union_set(upa, uset) };
1144        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1145                                         should_free_on_drop: true };
1146        let err = isl_rs_ctx.last_error();
1147        if err != Error::None_ {
1148            let err_msg = isl_rs_ctx.last_error_msg();
1149            isl_rs_ctx.reset_error();
1150            return Err(LibISLError::new(err, err_msg));
1151        }
1152        Ok(isl_rs_result)
1153    }
1154
1155    /// Wraps `isl_union_pw_aff_to_list`.
1156    pub fn to_list(self) -> Result<UnionPwAffList, LibISLError> {
1157        let el = self;
1158        let isl_rs_ctx = el.get_ctx();
1159        let mut el = el;
1160        el.do_not_free_on_drop();
1161        let el = el.ptr;
1162        let isl_rs_result = unsafe { isl_union_pw_aff_to_list(el) };
1163        let isl_rs_result = UnionPwAffList { ptr: isl_rs_result,
1164                                             should_free_on_drop: true };
1165        let err = isl_rs_ctx.last_error();
1166        if err != Error::None_ {
1167            let err_msg = isl_rs_ctx.last_error_msg();
1168            isl_rs_ctx.reset_error();
1169            return Err(LibISLError::new(err, err_msg));
1170        }
1171        Ok(isl_rs_result)
1172    }
1173
1174    /// Wraps `isl_union_pw_aff_to_str`.
1175    pub fn to_str(&self) -> Result<&str, LibISLError> {
1176        let upa = self;
1177        let isl_rs_ctx = upa.get_ctx();
1178        let upa = upa.ptr;
1179        let isl_rs_result = unsafe { isl_union_pw_aff_to_str(upa) };
1180        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1181        let isl_rs_result = isl_rs_result.to_str().unwrap();
1182        let err = isl_rs_ctx.last_error();
1183        if err != Error::None_ {
1184            let err_msg = isl_rs_ctx.last_error_msg();
1185            isl_rs_ctx.reset_error();
1186            return Err(LibISLError::new(err, err_msg));
1187        }
1188        Ok(isl_rs_result)
1189    }
1190
1191    /// Wraps `isl_union_pw_aff_union_add`.
1192    pub fn union_add(self, upa2: UnionPwAff) -> Result<UnionPwAff, LibISLError> {
1193        let upa1 = self;
1194        let isl_rs_ctx = upa1.get_ctx();
1195        let mut upa1 = upa1;
1196        upa1.do_not_free_on_drop();
1197        let upa1 = upa1.ptr;
1198        let mut upa2 = upa2;
1199        upa2.do_not_free_on_drop();
1200        let upa2 = upa2.ptr;
1201        let isl_rs_result = unsafe { isl_union_pw_aff_union_add(upa1, upa2) };
1202        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1203                                         should_free_on_drop: true };
1204        let err = isl_rs_ctx.last_error();
1205        if err != Error::None_ {
1206            let err_msg = isl_rs_ctx.last_error_msg();
1207            isl_rs_ctx.reset_error();
1208            return Err(LibISLError::new(err, err_msg));
1209        }
1210        Ok(isl_rs_result)
1211    }
1212
1213    /// Wraps `isl_union_pw_aff_val_on_domain`.
1214    pub fn val_on_domain(domain: UnionSet, v: Val) -> Result<UnionPwAff, LibISLError> {
1215        let isl_rs_ctx = domain.get_ctx();
1216        let mut domain = domain;
1217        domain.do_not_free_on_drop();
1218        let domain = domain.ptr;
1219        let mut v = v;
1220        v.do_not_free_on_drop();
1221        let v = v.ptr;
1222        let isl_rs_result = unsafe { isl_union_pw_aff_val_on_domain(domain, v) };
1223        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1224                                         should_free_on_drop: true };
1225        let err = isl_rs_ctx.last_error();
1226        if err != Error::None_ {
1227            let err_msg = isl_rs_ctx.last_error_msg();
1228            isl_rs_ctx.reset_error();
1229            return Err(LibISLError::new(err, err_msg));
1230        }
1231        Ok(isl_rs_result)
1232    }
1233
1234    /// Wraps `isl_union_pw_aff_zero_union_set`.
1235    pub fn zero_union_set(self) -> Result<UnionSet, LibISLError> {
1236        let upa = self;
1237        let isl_rs_ctx = upa.get_ctx();
1238        let mut upa = upa;
1239        upa.do_not_free_on_drop();
1240        let upa = upa.ptr;
1241        let isl_rs_result = unsafe { isl_union_pw_aff_zero_union_set(upa) };
1242        let isl_rs_result = UnionSet { ptr: isl_rs_result,
1243                                       should_free_on_drop: true };
1244        let err = isl_rs_ctx.last_error();
1245        if err != Error::None_ {
1246            let err_msg = isl_rs_ctx.last_error_msg();
1247            isl_rs_ctx.reset_error();
1248            return Err(LibISLError::new(err, err_msg));
1249        }
1250        Ok(isl_rs_result)
1251    }
1252
1253    /// Does not call isl_union_pw_aff_free() on being dropped. (For internal
1254    /// use only.)
1255    pub fn do_not_free_on_drop(&mut self) {
1256        self.should_free_on_drop = false;
1257    }
1258}
1259
1260impl Drop for UnionPwAff {
1261    fn drop(&mut self) {
1262        if self.should_free_on_drop {
1263            unsafe {
1264                isl_union_pw_aff_free(self.ptr);
1265            }
1266        }
1267    }
1268}