isl_rs/bindings/
union_pw_multi_aff.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Aff, Context, DimType, Error, LibISLError, MultiAff, MultiUnionPwAff, MultiVal, PwMultiAff,
6    PwMultiAffList, Set, Space, UnionMap, UnionPwAff, UnionPwMultiAffList, UnionSet, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12/// Wraps `isl_union_pw_multi_aff`.
13pub struct UnionPwMultiAff {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_union_pw_multi_aff_add(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
21
22    fn isl_union_pw_multi_aff_add_pw_multi_aff(upma: uintptr_t, pma: uintptr_t) -> uintptr_t;
23
24    fn isl_union_pw_multi_aff_align_params(upma: uintptr_t, model: uintptr_t) -> uintptr_t;
25
26    fn isl_union_pw_multi_aff_apply_union_pw_multi_aff(upma1: uintptr_t, upma2: uintptr_t)
27                                                       -> uintptr_t;
28
29    fn isl_union_pw_multi_aff_as_multi_union_pw_aff(upma: uintptr_t) -> uintptr_t;
30
31    fn isl_union_pw_multi_aff_as_pw_multi_aff(upma: uintptr_t) -> uintptr_t;
32
33    fn isl_union_pw_multi_aff_as_union_map(upma: uintptr_t) -> uintptr_t;
34
35    fn isl_union_pw_multi_aff_coalesce(upma: uintptr_t) -> uintptr_t;
36
37    fn isl_union_pw_multi_aff_copy(upma: uintptr_t) -> uintptr_t;
38
39    fn isl_union_pw_multi_aff_dim(upma: uintptr_t, type_: i32) -> i32;
40
41    fn isl_union_pw_multi_aff_domain(upma: uintptr_t) -> uintptr_t;
42
43    fn isl_union_pw_multi_aff_drop_dims(upma: uintptr_t, type_: i32, first: u32, n: u32)
44                                        -> uintptr_t;
45
46    fn isl_union_pw_multi_aff_drop_unused_params(upma: uintptr_t) -> uintptr_t;
47
48    fn isl_union_pw_multi_aff_dump(upma: uintptr_t) -> ();
49
50    fn isl_union_pw_multi_aff_empty(space: uintptr_t) -> uintptr_t;
51
52    fn isl_union_pw_multi_aff_empty_ctx(ctx: uintptr_t) -> uintptr_t;
53
54    fn isl_union_pw_multi_aff_empty_space(space: uintptr_t) -> uintptr_t;
55
56    fn isl_union_pw_multi_aff_extract_pw_multi_aff(upma: uintptr_t, space: uintptr_t) -> uintptr_t;
57
58    fn isl_union_pw_multi_aff_find_dim_by_name(upma: uintptr_t, type_: i32, name: *const c_char)
59                                               -> i32;
60
61    fn isl_union_pw_multi_aff_flat_range_product(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
62
63    fn isl_union_pw_multi_aff_free(upma: uintptr_t) -> uintptr_t;
64
65    fn isl_union_pw_multi_aff_from_aff(aff: uintptr_t) -> uintptr_t;
66
67    fn isl_union_pw_multi_aff_from_domain(uset: uintptr_t) -> uintptr_t;
68
69    fn isl_union_pw_multi_aff_from_multi_aff(ma: uintptr_t) -> uintptr_t;
70
71    fn isl_union_pw_multi_aff_from_multi_union_pw_aff(mupa: uintptr_t) -> uintptr_t;
72
73    fn isl_union_pw_multi_aff_from_pw_multi_aff(pma: uintptr_t) -> uintptr_t;
74
75    fn isl_union_pw_multi_aff_from_union_map(umap: uintptr_t) -> uintptr_t;
76
77    fn isl_union_pw_multi_aff_from_union_pw_aff(upa: uintptr_t) -> uintptr_t;
78
79    fn isl_union_pw_multi_aff_from_union_set(uset: uintptr_t) -> uintptr_t;
80
81    fn isl_union_pw_multi_aff_get_ctx(upma: uintptr_t) -> uintptr_t;
82
83    fn isl_union_pw_multi_aff_get_pw_multi_aff_list(upma: uintptr_t) -> uintptr_t;
84
85    fn isl_union_pw_multi_aff_get_space(upma: uintptr_t) -> uintptr_t;
86
87    fn isl_union_pw_multi_aff_get_union_pw_aff(upma: uintptr_t, pos: i32) -> uintptr_t;
88
89    fn isl_union_pw_multi_aff_gist(upma: uintptr_t, context: uintptr_t) -> uintptr_t;
90
91    fn isl_union_pw_multi_aff_gist_params(upma: uintptr_t, context: uintptr_t) -> uintptr_t;
92
93    fn isl_union_pw_multi_aff_intersect_domain(upma: uintptr_t, uset: uintptr_t) -> uintptr_t;
94
95    fn isl_union_pw_multi_aff_intersect_domain_space(upma: uintptr_t, space: uintptr_t)
96                                                     -> uintptr_t;
97
98    fn isl_union_pw_multi_aff_intersect_domain_union_set(upma: uintptr_t, uset: uintptr_t)
99                                                         -> uintptr_t;
100
101    fn isl_union_pw_multi_aff_intersect_domain_wrapped_domain(upma: uintptr_t, uset: uintptr_t)
102                                                              -> uintptr_t;
103
104    fn isl_union_pw_multi_aff_intersect_domain_wrapped_range(upma: uintptr_t, uset: uintptr_t)
105                                                             -> uintptr_t;
106
107    fn isl_union_pw_multi_aff_intersect_params(upma: uintptr_t, set: uintptr_t) -> uintptr_t;
108
109    fn isl_union_pw_multi_aff_involves_locals(upma: uintptr_t) -> i32;
110
111    fn isl_union_pw_multi_aff_involves_nan(upma: uintptr_t) -> i32;
112
113    fn isl_union_pw_multi_aff_isa_pw_multi_aff(upma: uintptr_t) -> i32;
114
115    fn isl_union_pw_multi_aff_multi_val_on_domain(domain: uintptr_t, mv: uintptr_t) -> uintptr_t;
116
117    fn isl_union_pw_multi_aff_n_pw_multi_aff(upma: uintptr_t) -> i32;
118
119    fn isl_union_pw_multi_aff_neg(upma: uintptr_t) -> uintptr_t;
120
121    fn isl_union_pw_multi_aff_plain_is_empty(upma: uintptr_t) -> i32;
122
123    fn isl_union_pw_multi_aff_plain_is_equal(upma1: uintptr_t, upma2: uintptr_t) -> i32;
124
125    fn isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(upma1: uintptr_t,
126                                                                                upma2: uintptr_t)
127                                                                                -> uintptr_t;
128
129    fn isl_union_pw_multi_aff_pullback_union_pw_multi_aff(upma1: uintptr_t, upma2: uintptr_t)
130                                                          -> uintptr_t;
131
132    fn isl_union_pw_multi_aff_range_factor_domain(upma: uintptr_t) -> uintptr_t;
133
134    fn isl_union_pw_multi_aff_range_factor_range(upma: uintptr_t) -> uintptr_t;
135
136    fn isl_union_pw_multi_aff_range_product(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
137
138    fn isl_union_pw_multi_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
139
140    fn isl_union_pw_multi_aff_reset_user(upma: uintptr_t) -> uintptr_t;
141
142    fn isl_union_pw_multi_aff_scale_down_val(upma: uintptr_t, val: uintptr_t) -> uintptr_t;
143
144    fn isl_union_pw_multi_aff_scale_multi_val(upma: uintptr_t, mv: uintptr_t) -> uintptr_t;
145
146    fn isl_union_pw_multi_aff_scale_val(upma: uintptr_t, val: uintptr_t) -> uintptr_t;
147
148    fn isl_union_pw_multi_aff_set_dim_name(upma: uintptr_t, type_: i32, pos: u32, s: *const c_char)
149                                           -> uintptr_t;
150
151    fn isl_union_pw_multi_aff_sub(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
152
153    fn isl_union_pw_multi_aff_subtract_domain(upma: uintptr_t, uset: uintptr_t) -> uintptr_t;
154
155    fn isl_union_pw_multi_aff_subtract_domain_space(upma: uintptr_t, space: uintptr_t)
156                                                    -> uintptr_t;
157
158    fn isl_union_pw_multi_aff_subtract_domain_union_set(upma: uintptr_t, uset: uintptr_t)
159                                                        -> uintptr_t;
160
161    fn isl_union_pw_multi_aff_to_list(el: uintptr_t) -> uintptr_t;
162
163    fn isl_union_pw_multi_aff_to_str(upma: uintptr_t) -> *const c_char;
164
165    fn isl_union_pw_multi_aff_union_add(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
166
167}
168
169impl UnionPwMultiAff {
170    /// Wraps `isl_union_pw_multi_aff_add`.
171    pub fn add(self, upma2: UnionPwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
172        let upma1 = self;
173        let isl_rs_ctx = upma1.get_ctx();
174        let mut upma1 = upma1;
175        upma1.do_not_free_on_drop();
176        let upma1 = upma1.ptr;
177        let mut upma2 = upma2;
178        upma2.do_not_free_on_drop();
179        let upma2 = upma2.ptr;
180        let isl_rs_result = unsafe { isl_union_pw_multi_aff_add(upma1, upma2) };
181        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
182                                              should_free_on_drop: true };
183        let err = isl_rs_ctx.last_error();
184        if err != Error::None_ {
185            let err_msg = isl_rs_ctx.last_error_msg();
186            isl_rs_ctx.reset_error();
187            return Err(LibISLError::new(err, err_msg));
188        }
189        Ok(isl_rs_result)
190    }
191
192    /// Wraps `isl_union_pw_multi_aff_add_pw_multi_aff`.
193    pub fn add_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
194        let upma = self;
195        let isl_rs_ctx = upma.get_ctx();
196        let mut upma = upma;
197        upma.do_not_free_on_drop();
198        let upma = upma.ptr;
199        let mut pma = pma;
200        pma.do_not_free_on_drop();
201        let pma = pma.ptr;
202        let isl_rs_result = unsafe { isl_union_pw_multi_aff_add_pw_multi_aff(upma, pma) };
203        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
204                                              should_free_on_drop: true };
205        let err = isl_rs_ctx.last_error();
206        if err != Error::None_ {
207            let err_msg = isl_rs_ctx.last_error_msg();
208            isl_rs_ctx.reset_error();
209            return Err(LibISLError::new(err, err_msg));
210        }
211        Ok(isl_rs_result)
212    }
213
214    /// Wraps `isl_union_pw_multi_aff_align_params`.
215    pub fn align_params(self, model: Space) -> Result<UnionPwMultiAff, LibISLError> {
216        let upma = self;
217        let isl_rs_ctx = upma.get_ctx();
218        let mut upma = upma;
219        upma.do_not_free_on_drop();
220        let upma = upma.ptr;
221        let mut model = model;
222        model.do_not_free_on_drop();
223        let model = model.ptr;
224        let isl_rs_result = unsafe { isl_union_pw_multi_aff_align_params(upma, model) };
225        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
226                                              should_free_on_drop: true };
227        let err = isl_rs_ctx.last_error();
228        if err != Error::None_ {
229            let err_msg = isl_rs_ctx.last_error_msg();
230            isl_rs_ctx.reset_error();
231            return Err(LibISLError::new(err, err_msg));
232        }
233        Ok(isl_rs_result)
234    }
235
236    /// Wraps `isl_union_pw_multi_aff_apply_union_pw_multi_aff`.
237    pub fn apply_union_pw_multi_aff(self, upma2: UnionPwMultiAff)
238                                    -> Result<UnionPwMultiAff, LibISLError> {
239        let upma1 = self;
240        let isl_rs_ctx = upma1.get_ctx();
241        let mut upma1 = upma1;
242        upma1.do_not_free_on_drop();
243        let upma1 = upma1.ptr;
244        let mut upma2 = upma2;
245        upma2.do_not_free_on_drop();
246        let upma2 = upma2.ptr;
247        let isl_rs_result =
248            unsafe { isl_union_pw_multi_aff_apply_union_pw_multi_aff(upma1, upma2) };
249        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
250                                              should_free_on_drop: true };
251        let err = isl_rs_ctx.last_error();
252        if err != Error::None_ {
253            let err_msg = isl_rs_ctx.last_error_msg();
254            isl_rs_ctx.reset_error();
255            return Err(LibISLError::new(err, err_msg));
256        }
257        Ok(isl_rs_result)
258    }
259
260    /// Wraps `isl_union_pw_multi_aff_as_multi_union_pw_aff`.
261    pub fn as_multi_union_pw_aff(self) -> Result<MultiUnionPwAff, LibISLError> {
262        let upma = self;
263        let isl_rs_ctx = upma.get_ctx();
264        let mut upma = upma;
265        upma.do_not_free_on_drop();
266        let upma = upma.ptr;
267        let isl_rs_result = unsafe { isl_union_pw_multi_aff_as_multi_union_pw_aff(upma) };
268        let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
269                                              should_free_on_drop: true };
270        let err = isl_rs_ctx.last_error();
271        if err != Error::None_ {
272            let err_msg = isl_rs_ctx.last_error_msg();
273            isl_rs_ctx.reset_error();
274            return Err(LibISLError::new(err, err_msg));
275        }
276        Ok(isl_rs_result)
277    }
278
279    /// Wraps `isl_union_pw_multi_aff_as_pw_multi_aff`.
280    pub fn as_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
281        let upma = self;
282        let isl_rs_ctx = upma.get_ctx();
283        let mut upma = upma;
284        upma.do_not_free_on_drop();
285        let upma = upma.ptr;
286        let isl_rs_result = unsafe { isl_union_pw_multi_aff_as_pw_multi_aff(upma) };
287        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
288                                         should_free_on_drop: true };
289        let err = isl_rs_ctx.last_error();
290        if err != Error::None_ {
291            let err_msg = isl_rs_ctx.last_error_msg();
292            isl_rs_ctx.reset_error();
293            return Err(LibISLError::new(err, err_msg));
294        }
295        Ok(isl_rs_result)
296    }
297
298    /// Wraps `isl_union_pw_multi_aff_as_union_map`.
299    pub fn as_union_map(self) -> Result<UnionMap, LibISLError> {
300        let upma = self;
301        let isl_rs_ctx = upma.get_ctx();
302        let mut upma = upma;
303        upma.do_not_free_on_drop();
304        let upma = upma.ptr;
305        let isl_rs_result = unsafe { isl_union_pw_multi_aff_as_union_map(upma) };
306        let isl_rs_result = UnionMap { ptr: isl_rs_result,
307                                       should_free_on_drop: true };
308        let err = isl_rs_ctx.last_error();
309        if err != Error::None_ {
310            let err_msg = isl_rs_ctx.last_error_msg();
311            isl_rs_ctx.reset_error();
312            return Err(LibISLError::new(err, err_msg));
313        }
314        Ok(isl_rs_result)
315    }
316
317    /// Wraps `isl_union_pw_multi_aff_coalesce`.
318    pub fn coalesce(self) -> Result<UnionPwMultiAff, LibISLError> {
319        let upma = self;
320        let isl_rs_ctx = upma.get_ctx();
321        let mut upma = upma;
322        upma.do_not_free_on_drop();
323        let upma = upma.ptr;
324        let isl_rs_result = unsafe { isl_union_pw_multi_aff_coalesce(upma) };
325        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
326                                              should_free_on_drop: true };
327        let err = isl_rs_ctx.last_error();
328        if err != Error::None_ {
329            let err_msg = isl_rs_ctx.last_error_msg();
330            isl_rs_ctx.reset_error();
331            return Err(LibISLError::new(err, err_msg));
332        }
333        Ok(isl_rs_result)
334    }
335
336    /// Wraps `isl_union_pw_multi_aff_copy`.
337    pub fn copy(&self) -> Result<UnionPwMultiAff, LibISLError> {
338        let upma = self;
339        let isl_rs_ctx = upma.get_ctx();
340        let upma = upma.ptr;
341        let isl_rs_result = unsafe { isl_union_pw_multi_aff_copy(upma) };
342        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
343                                              should_free_on_drop: true };
344        let err = isl_rs_ctx.last_error();
345        if err != Error::None_ {
346            let err_msg = isl_rs_ctx.last_error_msg();
347            isl_rs_ctx.reset_error();
348            return Err(LibISLError::new(err, err_msg));
349        }
350        Ok(isl_rs_result)
351    }
352
353    /// Wraps `isl_union_pw_multi_aff_dim`.
354    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
355        let upma = self;
356        let isl_rs_ctx = upma.get_ctx();
357        let upma = upma.ptr;
358        let type_ = type_.to_i32();
359        let isl_rs_result = unsafe { isl_union_pw_multi_aff_dim(upma, type_) };
360        let err = isl_rs_ctx.last_error();
361        if err != Error::None_ {
362            let err_msg = isl_rs_ctx.last_error_msg();
363            isl_rs_ctx.reset_error();
364            return Err(LibISLError::new(err, err_msg));
365        }
366        Ok(isl_rs_result)
367    }
368
369    /// Wraps `isl_union_pw_multi_aff_domain`.
370    pub fn domain(self) -> Result<UnionSet, LibISLError> {
371        let upma = self;
372        let isl_rs_ctx = upma.get_ctx();
373        let mut upma = upma;
374        upma.do_not_free_on_drop();
375        let upma = upma.ptr;
376        let isl_rs_result = unsafe { isl_union_pw_multi_aff_domain(upma) };
377        let isl_rs_result = UnionSet { ptr: isl_rs_result,
378                                       should_free_on_drop: true };
379        let err = isl_rs_ctx.last_error();
380        if err != Error::None_ {
381            let err_msg = isl_rs_ctx.last_error_msg();
382            isl_rs_ctx.reset_error();
383            return Err(LibISLError::new(err, err_msg));
384        }
385        Ok(isl_rs_result)
386    }
387
388    /// Wraps `isl_union_pw_multi_aff_drop_dims`.
389    pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
390                     -> Result<UnionPwMultiAff, LibISLError> {
391        let upma = self;
392        let isl_rs_ctx = upma.get_ctx();
393        let mut upma = upma;
394        upma.do_not_free_on_drop();
395        let upma = upma.ptr;
396        let type_ = type_.to_i32();
397        let isl_rs_result = unsafe { isl_union_pw_multi_aff_drop_dims(upma, type_, first, n) };
398        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
399                                              should_free_on_drop: true };
400        let err = isl_rs_ctx.last_error();
401        if err != Error::None_ {
402            let err_msg = isl_rs_ctx.last_error_msg();
403            isl_rs_ctx.reset_error();
404            return Err(LibISLError::new(err, err_msg));
405        }
406        Ok(isl_rs_result)
407    }
408
409    /// Wraps `isl_union_pw_multi_aff_drop_unused_params`.
410    pub fn drop_unused_params(self) -> Result<UnionPwMultiAff, LibISLError> {
411        let upma = self;
412        let isl_rs_ctx = upma.get_ctx();
413        let mut upma = upma;
414        upma.do_not_free_on_drop();
415        let upma = upma.ptr;
416        let isl_rs_result = unsafe { isl_union_pw_multi_aff_drop_unused_params(upma) };
417        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
418                                              should_free_on_drop: true };
419        let err = isl_rs_ctx.last_error();
420        if err != Error::None_ {
421            let err_msg = isl_rs_ctx.last_error_msg();
422            isl_rs_ctx.reset_error();
423            return Err(LibISLError::new(err, err_msg));
424        }
425        Ok(isl_rs_result)
426    }
427
428    /// Wraps `isl_union_pw_multi_aff_dump`.
429    pub fn dump(&self) -> Result<(), LibISLError> {
430        let upma = self;
431        let isl_rs_ctx = upma.get_ctx();
432        let upma = upma.ptr;
433        let isl_rs_result = unsafe { isl_union_pw_multi_aff_dump(upma) };
434        let err = isl_rs_ctx.last_error();
435        if err != Error::None_ {
436            let err_msg = isl_rs_ctx.last_error_msg();
437            isl_rs_ctx.reset_error();
438            return Err(LibISLError::new(err, err_msg));
439        }
440        Ok(isl_rs_result)
441    }
442
443    /// Wraps `isl_union_pw_multi_aff_empty`.
444    pub fn empty(space: Space) -> Result<UnionPwMultiAff, LibISLError> {
445        let isl_rs_ctx = space.get_ctx();
446        let mut space = space;
447        space.do_not_free_on_drop();
448        let space = space.ptr;
449        let isl_rs_result = unsafe { isl_union_pw_multi_aff_empty(space) };
450        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
451                                              should_free_on_drop: true };
452        let err = isl_rs_ctx.last_error();
453        if err != Error::None_ {
454            let err_msg = isl_rs_ctx.last_error_msg();
455            isl_rs_ctx.reset_error();
456            return Err(LibISLError::new(err, err_msg));
457        }
458        Ok(isl_rs_result)
459    }
460
461    /// Wraps `isl_union_pw_multi_aff_empty_ctx`.
462    pub fn empty_ctx(ctx: &Context) -> Result<UnionPwMultiAff, LibISLError> {
463        let isl_rs_ctx = Context { ptr: ctx.ptr,
464                                   should_free_on_drop: false };
465        let ctx = ctx.ptr;
466        let isl_rs_result = unsafe { isl_union_pw_multi_aff_empty_ctx(ctx) };
467        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
468                                              should_free_on_drop: true };
469        let err = isl_rs_ctx.last_error();
470        if err != Error::None_ {
471            let err_msg = isl_rs_ctx.last_error_msg();
472            isl_rs_ctx.reset_error();
473            return Err(LibISLError::new(err, err_msg));
474        }
475        Ok(isl_rs_result)
476    }
477
478    /// Wraps `isl_union_pw_multi_aff_empty_space`.
479    pub fn empty_space(space: Space) -> Result<UnionPwMultiAff, LibISLError> {
480        let isl_rs_ctx = space.get_ctx();
481        let mut space = space;
482        space.do_not_free_on_drop();
483        let space = space.ptr;
484        let isl_rs_result = unsafe { isl_union_pw_multi_aff_empty_space(space) };
485        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
486                                              should_free_on_drop: true };
487        let err = isl_rs_ctx.last_error();
488        if err != Error::None_ {
489            let err_msg = isl_rs_ctx.last_error_msg();
490            isl_rs_ctx.reset_error();
491            return Err(LibISLError::new(err, err_msg));
492        }
493        Ok(isl_rs_result)
494    }
495
496    /// Wraps `isl_union_pw_multi_aff_extract_pw_multi_aff`.
497    pub fn extract_pw_multi_aff(&self, space: Space) -> Result<PwMultiAff, LibISLError> {
498        let upma = self;
499        let isl_rs_ctx = upma.get_ctx();
500        let upma = upma.ptr;
501        let mut space = space;
502        space.do_not_free_on_drop();
503        let space = space.ptr;
504        let isl_rs_result = unsafe { isl_union_pw_multi_aff_extract_pw_multi_aff(upma, space) };
505        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
506                                         should_free_on_drop: true };
507        let err = isl_rs_ctx.last_error();
508        if err != Error::None_ {
509            let err_msg = isl_rs_ctx.last_error_msg();
510            isl_rs_ctx.reset_error();
511            return Err(LibISLError::new(err, err_msg));
512        }
513        Ok(isl_rs_result)
514    }
515
516    /// Wraps `isl_union_pw_multi_aff_find_dim_by_name`.
517    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
518        let upma = self;
519        let isl_rs_ctx = upma.get_ctx();
520        let upma = upma.ptr;
521        let type_ = type_.to_i32();
522        let name = CString::new(name).unwrap();
523        let name = name.as_ptr();
524        let isl_rs_result = unsafe { isl_union_pw_multi_aff_find_dim_by_name(upma, type_, name) };
525        let err = isl_rs_ctx.last_error();
526        if err != Error::None_ {
527            let err_msg = isl_rs_ctx.last_error_msg();
528            isl_rs_ctx.reset_error();
529            return Err(LibISLError::new(err, err_msg));
530        }
531        Ok(isl_rs_result)
532    }
533
534    /// Wraps `isl_union_pw_multi_aff_flat_range_product`.
535    pub fn flat_range_product(self, upma2: UnionPwMultiAff)
536                              -> Result<UnionPwMultiAff, LibISLError> {
537        let upma1 = self;
538        let isl_rs_ctx = upma1.get_ctx();
539        let mut upma1 = upma1;
540        upma1.do_not_free_on_drop();
541        let upma1 = upma1.ptr;
542        let mut upma2 = upma2;
543        upma2.do_not_free_on_drop();
544        let upma2 = upma2.ptr;
545        let isl_rs_result = unsafe { isl_union_pw_multi_aff_flat_range_product(upma1, upma2) };
546        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
547                                              should_free_on_drop: true };
548        let err = isl_rs_ctx.last_error();
549        if err != Error::None_ {
550            let err_msg = isl_rs_ctx.last_error_msg();
551            isl_rs_ctx.reset_error();
552            return Err(LibISLError::new(err, err_msg));
553        }
554        Ok(isl_rs_result)
555    }
556
557    /// Wraps `isl_union_pw_multi_aff_free`.
558    pub fn free(self) -> Result<UnionPwMultiAff, LibISLError> {
559        let upma = self;
560        let isl_rs_ctx = upma.get_ctx();
561        let mut upma = upma;
562        upma.do_not_free_on_drop();
563        let upma = upma.ptr;
564        let isl_rs_result = unsafe { isl_union_pw_multi_aff_free(upma) };
565        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
566                                              should_free_on_drop: true };
567        let err = isl_rs_ctx.last_error();
568        if err != Error::None_ {
569            let err_msg = isl_rs_ctx.last_error_msg();
570            isl_rs_ctx.reset_error();
571            return Err(LibISLError::new(err, err_msg));
572        }
573        Ok(isl_rs_result)
574    }
575
576    /// Wraps `isl_union_pw_multi_aff_from_aff`.
577    pub fn from_aff(aff: Aff) -> Result<UnionPwMultiAff, LibISLError> {
578        let isl_rs_ctx = aff.get_ctx();
579        let mut aff = aff;
580        aff.do_not_free_on_drop();
581        let aff = aff.ptr;
582        let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_aff(aff) };
583        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
584                                              should_free_on_drop: true };
585        let err = isl_rs_ctx.last_error();
586        if err != Error::None_ {
587            let err_msg = isl_rs_ctx.last_error_msg();
588            isl_rs_ctx.reset_error();
589            return Err(LibISLError::new(err, err_msg));
590        }
591        Ok(isl_rs_result)
592    }
593
594    /// Wraps `isl_union_pw_multi_aff_from_domain`.
595    pub fn from_domain(uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
596        let isl_rs_ctx = uset.get_ctx();
597        let mut uset = uset;
598        uset.do_not_free_on_drop();
599        let uset = uset.ptr;
600        let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_domain(uset) };
601        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
602                                              should_free_on_drop: true };
603        let err = isl_rs_ctx.last_error();
604        if err != Error::None_ {
605            let err_msg = isl_rs_ctx.last_error_msg();
606            isl_rs_ctx.reset_error();
607            return Err(LibISLError::new(err, err_msg));
608        }
609        Ok(isl_rs_result)
610    }
611
612    /// Wraps `isl_union_pw_multi_aff_from_multi_aff`.
613    pub fn from_multi_aff(ma: MultiAff) -> Result<UnionPwMultiAff, LibISLError> {
614        let isl_rs_ctx = ma.get_ctx();
615        let mut ma = ma;
616        ma.do_not_free_on_drop();
617        let ma = ma.ptr;
618        let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_multi_aff(ma) };
619        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
620                                              should_free_on_drop: true };
621        let err = isl_rs_ctx.last_error();
622        if err != Error::None_ {
623            let err_msg = isl_rs_ctx.last_error_msg();
624            isl_rs_ctx.reset_error();
625            return Err(LibISLError::new(err, err_msg));
626        }
627        Ok(isl_rs_result)
628    }
629
630    /// Wraps `isl_union_pw_multi_aff_from_multi_union_pw_aff`.
631    pub fn from_multi_union_pw_aff(mupa: MultiUnionPwAff) -> Result<UnionPwMultiAff, LibISLError> {
632        let isl_rs_ctx = mupa.get_ctx();
633        let mut mupa = mupa;
634        mupa.do_not_free_on_drop();
635        let mupa = mupa.ptr;
636        let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_multi_union_pw_aff(mupa) };
637        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
638                                              should_free_on_drop: true };
639        let err = isl_rs_ctx.last_error();
640        if err != Error::None_ {
641            let err_msg = isl_rs_ctx.last_error_msg();
642            isl_rs_ctx.reset_error();
643            return Err(LibISLError::new(err, err_msg));
644        }
645        Ok(isl_rs_result)
646    }
647
648    /// Wraps `isl_union_pw_multi_aff_from_pw_multi_aff`.
649    pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
650        let isl_rs_ctx = pma.get_ctx();
651        let mut pma = pma;
652        pma.do_not_free_on_drop();
653        let pma = pma.ptr;
654        let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_pw_multi_aff(pma) };
655        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
656                                              should_free_on_drop: true };
657        let err = isl_rs_ctx.last_error();
658        if err != Error::None_ {
659            let err_msg = isl_rs_ctx.last_error_msg();
660            isl_rs_ctx.reset_error();
661            return Err(LibISLError::new(err, err_msg));
662        }
663        Ok(isl_rs_result)
664    }
665
666    /// Wraps `isl_union_pw_multi_aff_from_union_map`.
667    pub fn from_union_map(umap: UnionMap) -> Result<UnionPwMultiAff, LibISLError> {
668        let isl_rs_ctx = umap.get_ctx();
669        let mut umap = umap;
670        umap.do_not_free_on_drop();
671        let umap = umap.ptr;
672        let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_union_map(umap) };
673        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
674                                              should_free_on_drop: true };
675        let err = isl_rs_ctx.last_error();
676        if err != Error::None_ {
677            let err_msg = isl_rs_ctx.last_error_msg();
678            isl_rs_ctx.reset_error();
679            return Err(LibISLError::new(err, err_msg));
680        }
681        Ok(isl_rs_result)
682    }
683
684    /// Wraps `isl_union_pw_multi_aff_from_union_pw_aff`.
685    pub fn from_union_pw_aff(upa: UnionPwAff) -> Result<UnionPwMultiAff, LibISLError> {
686        let isl_rs_ctx = upa.get_ctx();
687        let mut upa = upa;
688        upa.do_not_free_on_drop();
689        let upa = upa.ptr;
690        let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_union_pw_aff(upa) };
691        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
692                                              should_free_on_drop: true };
693        let err = isl_rs_ctx.last_error();
694        if err != Error::None_ {
695            let err_msg = isl_rs_ctx.last_error_msg();
696            isl_rs_ctx.reset_error();
697            return Err(LibISLError::new(err, err_msg));
698        }
699        Ok(isl_rs_result)
700    }
701
702    /// Wraps `isl_union_pw_multi_aff_from_union_set`.
703    pub fn from_union_set(uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
704        let isl_rs_ctx = uset.get_ctx();
705        let mut uset = uset;
706        uset.do_not_free_on_drop();
707        let uset = uset.ptr;
708        let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_union_set(uset) };
709        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
710                                              should_free_on_drop: true };
711        let err = isl_rs_ctx.last_error();
712        if err != Error::None_ {
713            let err_msg = isl_rs_ctx.last_error_msg();
714            isl_rs_ctx.reset_error();
715            return Err(LibISLError::new(err, err_msg));
716        }
717        Ok(isl_rs_result)
718    }
719
720    /// Wraps `isl_union_pw_multi_aff_get_ctx`.
721    pub fn get_ctx(&self) -> Context {
722        let upma = self;
723        let upma = upma.ptr;
724        let isl_rs_result = unsafe { isl_union_pw_multi_aff_get_ctx(upma) };
725        let isl_rs_result = Context { ptr: isl_rs_result,
726                                      should_free_on_drop: false };
727        isl_rs_result
728    }
729
730    /// Wraps `isl_union_pw_multi_aff_get_pw_multi_aff_list`.
731    pub fn get_pw_multi_aff_list(&self) -> Result<PwMultiAffList, LibISLError> {
732        let upma = self;
733        let isl_rs_ctx = upma.get_ctx();
734        let upma = upma.ptr;
735        let isl_rs_result = unsafe { isl_union_pw_multi_aff_get_pw_multi_aff_list(upma) };
736        let isl_rs_result = PwMultiAffList { ptr: isl_rs_result,
737                                             should_free_on_drop: true };
738        let err = isl_rs_ctx.last_error();
739        if err != Error::None_ {
740            let err_msg = isl_rs_ctx.last_error_msg();
741            isl_rs_ctx.reset_error();
742            return Err(LibISLError::new(err, err_msg));
743        }
744        Ok(isl_rs_result)
745    }
746
747    /// Wraps `isl_union_pw_multi_aff_get_space`.
748    pub fn get_space(&self) -> Result<Space, LibISLError> {
749        let upma = self;
750        let isl_rs_ctx = upma.get_ctx();
751        let upma = upma.ptr;
752        let isl_rs_result = unsafe { isl_union_pw_multi_aff_get_space(upma) };
753        let isl_rs_result = Space { ptr: isl_rs_result,
754                                    should_free_on_drop: true };
755        let err = isl_rs_ctx.last_error();
756        if err != Error::None_ {
757            let err_msg = isl_rs_ctx.last_error_msg();
758            isl_rs_ctx.reset_error();
759            return Err(LibISLError::new(err, err_msg));
760        }
761        Ok(isl_rs_result)
762    }
763
764    /// Wraps `isl_union_pw_multi_aff_get_union_pw_aff`.
765    pub fn get_union_pw_aff(&self, pos: i32) -> Result<UnionPwAff, LibISLError> {
766        let upma = self;
767        let isl_rs_ctx = upma.get_ctx();
768        let upma = upma.ptr;
769        let isl_rs_result = unsafe { isl_union_pw_multi_aff_get_union_pw_aff(upma, pos) };
770        let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
771                                         should_free_on_drop: true };
772        let err = isl_rs_ctx.last_error();
773        if err != Error::None_ {
774            let err_msg = isl_rs_ctx.last_error_msg();
775            isl_rs_ctx.reset_error();
776            return Err(LibISLError::new(err, err_msg));
777        }
778        Ok(isl_rs_result)
779    }
780
781    /// Wraps `isl_union_pw_multi_aff_gist`.
782    pub fn gist(self, context: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
783        let upma = self;
784        let isl_rs_ctx = upma.get_ctx();
785        let mut upma = upma;
786        upma.do_not_free_on_drop();
787        let upma = upma.ptr;
788        let mut context = context;
789        context.do_not_free_on_drop();
790        let context = context.ptr;
791        let isl_rs_result = unsafe { isl_union_pw_multi_aff_gist(upma, context) };
792        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
793                                              should_free_on_drop: true };
794        let err = isl_rs_ctx.last_error();
795        if err != Error::None_ {
796            let err_msg = isl_rs_ctx.last_error_msg();
797            isl_rs_ctx.reset_error();
798            return Err(LibISLError::new(err, err_msg));
799        }
800        Ok(isl_rs_result)
801    }
802
803    /// Wraps `isl_union_pw_multi_aff_gist_params`.
804    pub fn gist_params(self, context: Set) -> Result<UnionPwMultiAff, LibISLError> {
805        let upma = self;
806        let isl_rs_ctx = upma.get_ctx();
807        let mut upma = upma;
808        upma.do_not_free_on_drop();
809        let upma = upma.ptr;
810        let mut context = context;
811        context.do_not_free_on_drop();
812        let context = context.ptr;
813        let isl_rs_result = unsafe { isl_union_pw_multi_aff_gist_params(upma, context) };
814        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
815                                              should_free_on_drop: true };
816        let err = isl_rs_ctx.last_error();
817        if err != Error::None_ {
818            let err_msg = isl_rs_ctx.last_error_msg();
819            isl_rs_ctx.reset_error();
820            return Err(LibISLError::new(err, err_msg));
821        }
822        Ok(isl_rs_result)
823    }
824
825    /// Wraps `isl_union_pw_multi_aff_intersect_domain`.
826    pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
827        let upma = self;
828        let isl_rs_ctx = upma.get_ctx();
829        let mut upma = upma;
830        upma.do_not_free_on_drop();
831        let upma = upma.ptr;
832        let mut uset = uset;
833        uset.do_not_free_on_drop();
834        let uset = uset.ptr;
835        let isl_rs_result = unsafe { isl_union_pw_multi_aff_intersect_domain(upma, uset) };
836        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
837                                              should_free_on_drop: true };
838        let err = isl_rs_ctx.last_error();
839        if err != Error::None_ {
840            let err_msg = isl_rs_ctx.last_error_msg();
841            isl_rs_ctx.reset_error();
842            return Err(LibISLError::new(err, err_msg));
843        }
844        Ok(isl_rs_result)
845    }
846
847    /// Wraps `isl_union_pw_multi_aff_intersect_domain_space`.
848    pub fn intersect_domain_space(self, space: Space) -> Result<UnionPwMultiAff, LibISLError> {
849        let upma = self;
850        let isl_rs_ctx = upma.get_ctx();
851        let mut upma = upma;
852        upma.do_not_free_on_drop();
853        let upma = upma.ptr;
854        let mut space = space;
855        space.do_not_free_on_drop();
856        let space = space.ptr;
857        let isl_rs_result = unsafe { isl_union_pw_multi_aff_intersect_domain_space(upma, space) };
858        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
859                                              should_free_on_drop: true };
860        let err = isl_rs_ctx.last_error();
861        if err != Error::None_ {
862            let err_msg = isl_rs_ctx.last_error_msg();
863            isl_rs_ctx.reset_error();
864            return Err(LibISLError::new(err, err_msg));
865        }
866        Ok(isl_rs_result)
867    }
868
869    /// Wraps `isl_union_pw_multi_aff_intersect_domain_union_set`.
870    pub fn intersect_domain_union_set(self, uset: UnionSet)
871                                      -> Result<UnionPwMultiAff, LibISLError> {
872        let upma = self;
873        let isl_rs_ctx = upma.get_ctx();
874        let mut upma = upma;
875        upma.do_not_free_on_drop();
876        let upma = upma.ptr;
877        let mut uset = uset;
878        uset.do_not_free_on_drop();
879        let uset = uset.ptr;
880        let isl_rs_result =
881            unsafe { isl_union_pw_multi_aff_intersect_domain_union_set(upma, uset) };
882        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
883                                              should_free_on_drop: true };
884        let err = isl_rs_ctx.last_error();
885        if err != Error::None_ {
886            let err_msg = isl_rs_ctx.last_error_msg();
887            isl_rs_ctx.reset_error();
888            return Err(LibISLError::new(err, err_msg));
889        }
890        Ok(isl_rs_result)
891    }
892
893    /// Wraps `isl_union_pw_multi_aff_intersect_domain_wrapped_domain`.
894    pub fn intersect_domain_wrapped_domain(self, uset: UnionSet)
895                                           -> Result<UnionPwMultiAff, LibISLError> {
896        let upma = self;
897        let isl_rs_ctx = upma.get_ctx();
898        let mut upma = upma;
899        upma.do_not_free_on_drop();
900        let upma = upma.ptr;
901        let mut uset = uset;
902        uset.do_not_free_on_drop();
903        let uset = uset.ptr;
904        let isl_rs_result =
905            unsafe { isl_union_pw_multi_aff_intersect_domain_wrapped_domain(upma, uset) };
906        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
907                                              should_free_on_drop: true };
908        let err = isl_rs_ctx.last_error();
909        if err != Error::None_ {
910            let err_msg = isl_rs_ctx.last_error_msg();
911            isl_rs_ctx.reset_error();
912            return Err(LibISLError::new(err, err_msg));
913        }
914        Ok(isl_rs_result)
915    }
916
917    /// Wraps `isl_union_pw_multi_aff_intersect_domain_wrapped_range`.
918    pub fn intersect_domain_wrapped_range(self, uset: UnionSet)
919                                          -> Result<UnionPwMultiAff, LibISLError> {
920        let upma = self;
921        let isl_rs_ctx = upma.get_ctx();
922        let mut upma = upma;
923        upma.do_not_free_on_drop();
924        let upma = upma.ptr;
925        let mut uset = uset;
926        uset.do_not_free_on_drop();
927        let uset = uset.ptr;
928        let isl_rs_result =
929            unsafe { isl_union_pw_multi_aff_intersect_domain_wrapped_range(upma, uset) };
930        let isl_rs_result = UnionPwMultiAff { 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_multi_aff_intersect_params`.
942    pub fn intersect_params(self, set: Set) -> Result<UnionPwMultiAff, LibISLError> {
943        let upma = self;
944        let isl_rs_ctx = upma.get_ctx();
945        let mut upma = upma;
946        upma.do_not_free_on_drop();
947        let upma = upma.ptr;
948        let mut set = set;
949        set.do_not_free_on_drop();
950        let set = set.ptr;
951        let isl_rs_result = unsafe { isl_union_pw_multi_aff_intersect_params(upma, set) };
952        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
953                                              should_free_on_drop: true };
954        let err = isl_rs_ctx.last_error();
955        if err != Error::None_ {
956            let err_msg = isl_rs_ctx.last_error_msg();
957            isl_rs_ctx.reset_error();
958            return Err(LibISLError::new(err, err_msg));
959        }
960        Ok(isl_rs_result)
961    }
962
963    /// Wraps `isl_union_pw_multi_aff_involves_locals`.
964    pub fn involves_locals(&self) -> Result<bool, LibISLError> {
965        let upma = self;
966        let isl_rs_ctx = upma.get_ctx();
967        let upma = upma.ptr;
968        let isl_rs_result = unsafe { isl_union_pw_multi_aff_involves_locals(upma) };
969        let isl_rs_result = match isl_rs_result {
970            0 => false,
971            1 => true,
972            _ => {
973                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
974            }
975        };
976        let err = isl_rs_ctx.last_error();
977        if err != Error::None_ {
978            let err_msg = isl_rs_ctx.last_error_msg();
979            isl_rs_ctx.reset_error();
980            return Err(LibISLError::new(err, err_msg));
981        }
982        Ok(isl_rs_result)
983    }
984
985    /// Wraps `isl_union_pw_multi_aff_involves_nan`.
986    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
987        let upma = self;
988        let isl_rs_ctx = upma.get_ctx();
989        let upma = upma.ptr;
990        let isl_rs_result = unsafe { isl_union_pw_multi_aff_involves_nan(upma) };
991        let isl_rs_result = match isl_rs_result {
992            0 => false,
993            1 => true,
994            _ => {
995                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
996            }
997        };
998        let err = isl_rs_ctx.last_error();
999        if err != Error::None_ {
1000            let err_msg = isl_rs_ctx.last_error_msg();
1001            isl_rs_ctx.reset_error();
1002            return Err(LibISLError::new(err, err_msg));
1003        }
1004        Ok(isl_rs_result)
1005    }
1006
1007    /// Wraps `isl_union_pw_multi_aff_isa_pw_multi_aff`.
1008    pub fn isa_pw_multi_aff(&self) -> Result<bool, LibISLError> {
1009        let upma = self;
1010        let isl_rs_ctx = upma.get_ctx();
1011        let upma = upma.ptr;
1012        let isl_rs_result = unsafe { isl_union_pw_multi_aff_isa_pw_multi_aff(upma) };
1013        let isl_rs_result = match isl_rs_result {
1014            0 => false,
1015            1 => true,
1016            _ => {
1017                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1018            }
1019        };
1020        let err = isl_rs_ctx.last_error();
1021        if err != Error::None_ {
1022            let err_msg = isl_rs_ctx.last_error_msg();
1023            isl_rs_ctx.reset_error();
1024            return Err(LibISLError::new(err, err_msg));
1025        }
1026        Ok(isl_rs_result)
1027    }
1028
1029    /// Wraps `isl_union_pw_multi_aff_multi_val_on_domain`.
1030    pub fn multi_val_on_domain(domain: UnionSet, mv: MultiVal)
1031                               -> Result<UnionPwMultiAff, LibISLError> {
1032        let isl_rs_ctx = domain.get_ctx();
1033        let mut domain = domain;
1034        domain.do_not_free_on_drop();
1035        let domain = domain.ptr;
1036        let mut mv = mv;
1037        mv.do_not_free_on_drop();
1038        let mv = mv.ptr;
1039        let isl_rs_result = unsafe { isl_union_pw_multi_aff_multi_val_on_domain(domain, mv) };
1040        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1041                                              should_free_on_drop: true };
1042        let err = isl_rs_ctx.last_error();
1043        if err != Error::None_ {
1044            let err_msg = isl_rs_ctx.last_error_msg();
1045            isl_rs_ctx.reset_error();
1046            return Err(LibISLError::new(err, err_msg));
1047        }
1048        Ok(isl_rs_result)
1049    }
1050
1051    /// Wraps `isl_union_pw_multi_aff_n_pw_multi_aff`.
1052    pub fn n_pw_multi_aff(&self) -> Result<i32, LibISLError> {
1053        let upma = self;
1054        let isl_rs_ctx = upma.get_ctx();
1055        let upma = upma.ptr;
1056        let isl_rs_result = unsafe { isl_union_pw_multi_aff_n_pw_multi_aff(upma) };
1057        let err = isl_rs_ctx.last_error();
1058        if err != Error::None_ {
1059            let err_msg = isl_rs_ctx.last_error_msg();
1060            isl_rs_ctx.reset_error();
1061            return Err(LibISLError::new(err, err_msg));
1062        }
1063        Ok(isl_rs_result)
1064    }
1065
1066    /// Wraps `isl_union_pw_multi_aff_neg`.
1067    pub fn neg(self) -> Result<UnionPwMultiAff, LibISLError> {
1068        let upma = self;
1069        let isl_rs_ctx = upma.get_ctx();
1070        let mut upma = upma;
1071        upma.do_not_free_on_drop();
1072        let upma = upma.ptr;
1073        let isl_rs_result = unsafe { isl_union_pw_multi_aff_neg(upma) };
1074        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1075                                              should_free_on_drop: true };
1076        let err = isl_rs_ctx.last_error();
1077        if err != Error::None_ {
1078            let err_msg = isl_rs_ctx.last_error_msg();
1079            isl_rs_ctx.reset_error();
1080            return Err(LibISLError::new(err, err_msg));
1081        }
1082        Ok(isl_rs_result)
1083    }
1084
1085    /// Wraps `isl_union_pw_multi_aff_plain_is_empty`.
1086    pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
1087        let upma = self;
1088        let isl_rs_ctx = upma.get_ctx();
1089        let upma = upma.ptr;
1090        let isl_rs_result = unsafe { isl_union_pw_multi_aff_plain_is_empty(upma) };
1091        let isl_rs_result = match isl_rs_result {
1092            0 => false,
1093            1 => true,
1094            _ => {
1095                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1096            }
1097        };
1098        let err = isl_rs_ctx.last_error();
1099        if err != Error::None_ {
1100            let err_msg = isl_rs_ctx.last_error_msg();
1101            isl_rs_ctx.reset_error();
1102            return Err(LibISLError::new(err, err_msg));
1103        }
1104        Ok(isl_rs_result)
1105    }
1106
1107    /// Wraps `isl_union_pw_multi_aff_plain_is_equal`.
1108    pub fn plain_is_equal(&self, upma2: &UnionPwMultiAff) -> Result<bool, LibISLError> {
1109        let upma1 = self;
1110        let isl_rs_ctx = upma1.get_ctx();
1111        let upma1 = upma1.ptr;
1112        let upma2 = upma2.ptr;
1113        let isl_rs_result = unsafe { isl_union_pw_multi_aff_plain_is_equal(upma1, upma2) };
1114        let isl_rs_result = match isl_rs_result {
1115            0 => false,
1116            1 => true,
1117            _ => {
1118                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1119            }
1120        };
1121        let err = isl_rs_ctx.last_error();
1122        if err != Error::None_ {
1123            let err_msg = isl_rs_ctx.last_error_msg();
1124            isl_rs_ctx.reset_error();
1125            return Err(LibISLError::new(err, err_msg));
1126        }
1127        Ok(isl_rs_result)
1128    }
1129
1130    /// Wraps `isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff`.
1131    pub fn preimage_domain_wrapped_domain_union_pw_multi_aff(
1132        self, upma2: UnionPwMultiAff)
1133        -> Result<UnionPwMultiAff, LibISLError> {
1134        let upma1 = self;
1135        let isl_rs_ctx = upma1.get_ctx();
1136        let mut upma1 = upma1;
1137        upma1.do_not_free_on_drop();
1138        let upma1 = upma1.ptr;
1139        let mut upma2 = upma2;
1140        upma2.do_not_free_on_drop();
1141        let upma2 = upma2.ptr;
1142        let isl_rs_result = unsafe {
1143            isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(upma1, upma2)
1144        };
1145        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1146                                              should_free_on_drop: true };
1147        let err = isl_rs_ctx.last_error();
1148        if err != Error::None_ {
1149            let err_msg = isl_rs_ctx.last_error_msg();
1150            isl_rs_ctx.reset_error();
1151            return Err(LibISLError::new(err, err_msg));
1152        }
1153        Ok(isl_rs_result)
1154    }
1155
1156    /// Wraps `isl_union_pw_multi_aff_pullback_union_pw_multi_aff`.
1157    pub fn pullback_union_pw_multi_aff(self, upma2: UnionPwMultiAff)
1158                                       -> Result<UnionPwMultiAff, LibISLError> {
1159        let upma1 = self;
1160        let isl_rs_ctx = upma1.get_ctx();
1161        let mut upma1 = upma1;
1162        upma1.do_not_free_on_drop();
1163        let upma1 = upma1.ptr;
1164        let mut upma2 = upma2;
1165        upma2.do_not_free_on_drop();
1166        let upma2 = upma2.ptr;
1167        let isl_rs_result =
1168            unsafe { isl_union_pw_multi_aff_pullback_union_pw_multi_aff(upma1, upma2) };
1169        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1170                                              should_free_on_drop: true };
1171        let err = isl_rs_ctx.last_error();
1172        if err != Error::None_ {
1173            let err_msg = isl_rs_ctx.last_error_msg();
1174            isl_rs_ctx.reset_error();
1175            return Err(LibISLError::new(err, err_msg));
1176        }
1177        Ok(isl_rs_result)
1178    }
1179
1180    /// Wraps `isl_union_pw_multi_aff_range_factor_domain`.
1181    pub fn range_factor_domain(self) -> Result<UnionPwMultiAff, LibISLError> {
1182        let upma = self;
1183        let isl_rs_ctx = upma.get_ctx();
1184        let mut upma = upma;
1185        upma.do_not_free_on_drop();
1186        let upma = upma.ptr;
1187        let isl_rs_result = unsafe { isl_union_pw_multi_aff_range_factor_domain(upma) };
1188        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1189                                              should_free_on_drop: true };
1190        let err = isl_rs_ctx.last_error();
1191        if err != Error::None_ {
1192            let err_msg = isl_rs_ctx.last_error_msg();
1193            isl_rs_ctx.reset_error();
1194            return Err(LibISLError::new(err, err_msg));
1195        }
1196        Ok(isl_rs_result)
1197    }
1198
1199    /// Wraps `isl_union_pw_multi_aff_range_factor_range`.
1200    pub fn range_factor_range(self) -> Result<UnionPwMultiAff, LibISLError> {
1201        let upma = self;
1202        let isl_rs_ctx = upma.get_ctx();
1203        let mut upma = upma;
1204        upma.do_not_free_on_drop();
1205        let upma = upma.ptr;
1206        let isl_rs_result = unsafe { isl_union_pw_multi_aff_range_factor_range(upma) };
1207        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1208                                              should_free_on_drop: true };
1209        let err = isl_rs_ctx.last_error();
1210        if err != Error::None_ {
1211            let err_msg = isl_rs_ctx.last_error_msg();
1212            isl_rs_ctx.reset_error();
1213            return Err(LibISLError::new(err, err_msg));
1214        }
1215        Ok(isl_rs_result)
1216    }
1217
1218    /// Wraps `isl_union_pw_multi_aff_range_product`.
1219    pub fn range_product(self, upma2: UnionPwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
1220        let upma1 = self;
1221        let isl_rs_ctx = upma1.get_ctx();
1222        let mut upma1 = upma1;
1223        upma1.do_not_free_on_drop();
1224        let upma1 = upma1.ptr;
1225        let mut upma2 = upma2;
1226        upma2.do_not_free_on_drop();
1227        let upma2 = upma2.ptr;
1228        let isl_rs_result = unsafe { isl_union_pw_multi_aff_range_product(upma1, upma2) };
1229        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1230                                              should_free_on_drop: true };
1231        let err = isl_rs_ctx.last_error();
1232        if err != Error::None_ {
1233            let err_msg = isl_rs_ctx.last_error_msg();
1234            isl_rs_ctx.reset_error();
1235            return Err(LibISLError::new(err, err_msg));
1236        }
1237        Ok(isl_rs_result)
1238    }
1239
1240    /// Wraps `isl_union_pw_multi_aff_read_from_str`.
1241    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionPwMultiAff, LibISLError> {
1242        let isl_rs_ctx = Context { ptr: ctx.ptr,
1243                                   should_free_on_drop: false };
1244        let ctx = ctx.ptr;
1245        let str_ = CString::new(str_).unwrap();
1246        let str_ = str_.as_ptr();
1247        let isl_rs_result = unsafe { isl_union_pw_multi_aff_read_from_str(ctx, str_) };
1248        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1249                                              should_free_on_drop: true };
1250        let err = isl_rs_ctx.last_error();
1251        if err != Error::None_ {
1252            let err_msg = isl_rs_ctx.last_error_msg();
1253            isl_rs_ctx.reset_error();
1254            return Err(LibISLError::new(err, err_msg));
1255        }
1256        Ok(isl_rs_result)
1257    }
1258
1259    /// Wraps `isl_union_pw_multi_aff_reset_user`.
1260    pub fn reset_user(self) -> Result<UnionPwMultiAff, LibISLError> {
1261        let upma = self;
1262        let isl_rs_ctx = upma.get_ctx();
1263        let mut upma = upma;
1264        upma.do_not_free_on_drop();
1265        let upma = upma.ptr;
1266        let isl_rs_result = unsafe { isl_union_pw_multi_aff_reset_user(upma) };
1267        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1268                                              should_free_on_drop: true };
1269        let err = isl_rs_ctx.last_error();
1270        if err != Error::None_ {
1271            let err_msg = isl_rs_ctx.last_error_msg();
1272            isl_rs_ctx.reset_error();
1273            return Err(LibISLError::new(err, err_msg));
1274        }
1275        Ok(isl_rs_result)
1276    }
1277
1278    /// Wraps `isl_union_pw_multi_aff_scale_down_val`.
1279    pub fn scale_down_val(self, val: Val) -> Result<UnionPwMultiAff, LibISLError> {
1280        let upma = self;
1281        let isl_rs_ctx = upma.get_ctx();
1282        let mut upma = upma;
1283        upma.do_not_free_on_drop();
1284        let upma = upma.ptr;
1285        let mut val = val;
1286        val.do_not_free_on_drop();
1287        let val = val.ptr;
1288        let isl_rs_result = unsafe { isl_union_pw_multi_aff_scale_down_val(upma, val) };
1289        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1290                                              should_free_on_drop: true };
1291        let err = isl_rs_ctx.last_error();
1292        if err != Error::None_ {
1293            let err_msg = isl_rs_ctx.last_error_msg();
1294            isl_rs_ctx.reset_error();
1295            return Err(LibISLError::new(err, err_msg));
1296        }
1297        Ok(isl_rs_result)
1298    }
1299
1300    /// Wraps `isl_union_pw_multi_aff_scale_multi_val`.
1301    pub fn scale_multi_val(self, mv: MultiVal) -> Result<UnionPwMultiAff, LibISLError> {
1302        let upma = self;
1303        let isl_rs_ctx = upma.get_ctx();
1304        let mut upma = upma;
1305        upma.do_not_free_on_drop();
1306        let upma = upma.ptr;
1307        let mut mv = mv;
1308        mv.do_not_free_on_drop();
1309        let mv = mv.ptr;
1310        let isl_rs_result = unsafe { isl_union_pw_multi_aff_scale_multi_val(upma, mv) };
1311        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1312                                              should_free_on_drop: true };
1313        let err = isl_rs_ctx.last_error();
1314        if err != Error::None_ {
1315            let err_msg = isl_rs_ctx.last_error_msg();
1316            isl_rs_ctx.reset_error();
1317            return Err(LibISLError::new(err, err_msg));
1318        }
1319        Ok(isl_rs_result)
1320    }
1321
1322    /// Wraps `isl_union_pw_multi_aff_scale_val`.
1323    pub fn scale_val(self, val: Val) -> Result<UnionPwMultiAff, LibISLError> {
1324        let upma = self;
1325        let isl_rs_ctx = upma.get_ctx();
1326        let mut upma = upma;
1327        upma.do_not_free_on_drop();
1328        let upma = upma.ptr;
1329        let mut val = val;
1330        val.do_not_free_on_drop();
1331        let val = val.ptr;
1332        let isl_rs_result = unsafe { isl_union_pw_multi_aff_scale_val(upma, val) };
1333        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1334                                              should_free_on_drop: true };
1335        let err = isl_rs_ctx.last_error();
1336        if err != Error::None_ {
1337            let err_msg = isl_rs_ctx.last_error_msg();
1338            isl_rs_ctx.reset_error();
1339            return Err(LibISLError::new(err, err_msg));
1340        }
1341        Ok(isl_rs_result)
1342    }
1343
1344    /// Wraps `isl_union_pw_multi_aff_set_dim_name`.
1345    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1346                        -> Result<UnionPwMultiAff, LibISLError> {
1347        let upma = self;
1348        let isl_rs_ctx = upma.get_ctx();
1349        let mut upma = upma;
1350        upma.do_not_free_on_drop();
1351        let upma = upma.ptr;
1352        let type_ = type_.to_i32();
1353        let s = CString::new(s).unwrap();
1354        let s = s.as_ptr();
1355        let isl_rs_result = unsafe { isl_union_pw_multi_aff_set_dim_name(upma, type_, pos, s) };
1356        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1357                                              should_free_on_drop: true };
1358        let err = isl_rs_ctx.last_error();
1359        if err != Error::None_ {
1360            let err_msg = isl_rs_ctx.last_error_msg();
1361            isl_rs_ctx.reset_error();
1362            return Err(LibISLError::new(err, err_msg));
1363        }
1364        Ok(isl_rs_result)
1365    }
1366
1367    /// Wraps `isl_union_pw_multi_aff_sub`.
1368    pub fn sub(self, upma2: UnionPwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
1369        let upma1 = self;
1370        let isl_rs_ctx = upma1.get_ctx();
1371        let mut upma1 = upma1;
1372        upma1.do_not_free_on_drop();
1373        let upma1 = upma1.ptr;
1374        let mut upma2 = upma2;
1375        upma2.do_not_free_on_drop();
1376        let upma2 = upma2.ptr;
1377        let isl_rs_result = unsafe { isl_union_pw_multi_aff_sub(upma1, upma2) };
1378        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1379                                              should_free_on_drop: true };
1380        let err = isl_rs_ctx.last_error();
1381        if err != Error::None_ {
1382            let err_msg = isl_rs_ctx.last_error_msg();
1383            isl_rs_ctx.reset_error();
1384            return Err(LibISLError::new(err, err_msg));
1385        }
1386        Ok(isl_rs_result)
1387    }
1388
1389    /// Wraps `isl_union_pw_multi_aff_subtract_domain`.
1390    pub fn subtract_domain(self, uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
1391        let upma = self;
1392        let isl_rs_ctx = upma.get_ctx();
1393        let mut upma = upma;
1394        upma.do_not_free_on_drop();
1395        let upma = upma.ptr;
1396        let mut uset = uset;
1397        uset.do_not_free_on_drop();
1398        let uset = uset.ptr;
1399        let isl_rs_result = unsafe { isl_union_pw_multi_aff_subtract_domain(upma, uset) };
1400        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1401                                              should_free_on_drop: true };
1402        let err = isl_rs_ctx.last_error();
1403        if err != Error::None_ {
1404            let err_msg = isl_rs_ctx.last_error_msg();
1405            isl_rs_ctx.reset_error();
1406            return Err(LibISLError::new(err, err_msg));
1407        }
1408        Ok(isl_rs_result)
1409    }
1410
1411    /// Wraps `isl_union_pw_multi_aff_subtract_domain_space`.
1412    pub fn subtract_domain_space(self, space: Space) -> Result<UnionPwMultiAff, LibISLError> {
1413        let upma = self;
1414        let isl_rs_ctx = upma.get_ctx();
1415        let mut upma = upma;
1416        upma.do_not_free_on_drop();
1417        let upma = upma.ptr;
1418        let mut space = space;
1419        space.do_not_free_on_drop();
1420        let space = space.ptr;
1421        let isl_rs_result = unsafe { isl_union_pw_multi_aff_subtract_domain_space(upma, space) };
1422        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1423                                              should_free_on_drop: true };
1424        let err = isl_rs_ctx.last_error();
1425        if err != Error::None_ {
1426            let err_msg = isl_rs_ctx.last_error_msg();
1427            isl_rs_ctx.reset_error();
1428            return Err(LibISLError::new(err, err_msg));
1429        }
1430        Ok(isl_rs_result)
1431    }
1432
1433    /// Wraps `isl_union_pw_multi_aff_subtract_domain_union_set`.
1434    pub fn subtract_domain_union_set(self, uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
1435        let upma = self;
1436        let isl_rs_ctx = upma.get_ctx();
1437        let mut upma = upma;
1438        upma.do_not_free_on_drop();
1439        let upma = upma.ptr;
1440        let mut uset = uset;
1441        uset.do_not_free_on_drop();
1442        let uset = uset.ptr;
1443        let isl_rs_result = unsafe { isl_union_pw_multi_aff_subtract_domain_union_set(upma, uset) };
1444        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1445                                              should_free_on_drop: true };
1446        let err = isl_rs_ctx.last_error();
1447        if err != Error::None_ {
1448            let err_msg = isl_rs_ctx.last_error_msg();
1449            isl_rs_ctx.reset_error();
1450            return Err(LibISLError::new(err, err_msg));
1451        }
1452        Ok(isl_rs_result)
1453    }
1454
1455    /// Wraps `isl_union_pw_multi_aff_to_list`.
1456    pub fn to_list(self) -> Result<UnionPwMultiAffList, LibISLError> {
1457        let el = self;
1458        let isl_rs_ctx = el.get_ctx();
1459        let mut el = el;
1460        el.do_not_free_on_drop();
1461        let el = el.ptr;
1462        let isl_rs_result = unsafe { isl_union_pw_multi_aff_to_list(el) };
1463        let isl_rs_result = UnionPwMultiAffList { ptr: isl_rs_result,
1464                                                  should_free_on_drop: true };
1465        let err = isl_rs_ctx.last_error();
1466        if err != Error::None_ {
1467            let err_msg = isl_rs_ctx.last_error_msg();
1468            isl_rs_ctx.reset_error();
1469            return Err(LibISLError::new(err, err_msg));
1470        }
1471        Ok(isl_rs_result)
1472    }
1473
1474    /// Wraps `isl_union_pw_multi_aff_to_str`.
1475    pub fn to_str(&self) -> Result<&str, LibISLError> {
1476        let upma = self;
1477        let isl_rs_ctx = upma.get_ctx();
1478        let upma = upma.ptr;
1479        let isl_rs_result = unsafe { isl_union_pw_multi_aff_to_str(upma) };
1480        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1481        let isl_rs_result = isl_rs_result.to_str().unwrap();
1482        let err = isl_rs_ctx.last_error();
1483        if err != Error::None_ {
1484            let err_msg = isl_rs_ctx.last_error_msg();
1485            isl_rs_ctx.reset_error();
1486            return Err(LibISLError::new(err, err_msg));
1487        }
1488        Ok(isl_rs_result)
1489    }
1490
1491    /// Wraps `isl_union_pw_multi_aff_union_add`.
1492    pub fn union_add(self, upma2: UnionPwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
1493        let upma1 = self;
1494        let isl_rs_ctx = upma1.get_ctx();
1495        let mut upma1 = upma1;
1496        upma1.do_not_free_on_drop();
1497        let upma1 = upma1.ptr;
1498        let mut upma2 = upma2;
1499        upma2.do_not_free_on_drop();
1500        let upma2 = upma2.ptr;
1501        let isl_rs_result = unsafe { isl_union_pw_multi_aff_union_add(upma1, upma2) };
1502        let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1503                                              should_free_on_drop: true };
1504        let err = isl_rs_ctx.last_error();
1505        if err != Error::None_ {
1506            let err_msg = isl_rs_ctx.last_error_msg();
1507            isl_rs_ctx.reset_error();
1508            return Err(LibISLError::new(err, err_msg));
1509        }
1510        Ok(isl_rs_result)
1511    }
1512
1513    /// Does not call isl_union_pw_multi_aff_free() on being dropped. (For
1514    /// internal use only.)
1515    pub fn do_not_free_on_drop(&mut self) {
1516        self.should_free_on_drop = false;
1517    }
1518}
1519
1520impl Drop for UnionPwMultiAff {
1521    fn drop(&mut self) {
1522        if self.should_free_on_drop {
1523            unsafe {
1524                isl_union_pw_multi_aff_free(self.ptr);
1525            }
1526        }
1527    }
1528}