isl_rs/bindings/
schedule_constraints.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{Context, Error, LibISLError, Schedule, Set, UnionMap, UnionSet};
5use libc::uintptr_t;
6use std::ffi::{CStr, CString};
7use std::os::raw::c_char;
8
9/// Wraps `isl_schedule_constraints`.
10pub struct ScheduleConstraints {
11    pub ptr: uintptr_t,
12    pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17    fn isl_schedule_constraints_apply(sc: uintptr_t, umap: uintptr_t) -> uintptr_t;
18
19    fn isl_schedule_constraints_compute_schedule(sc: uintptr_t) -> uintptr_t;
20
21    fn isl_schedule_constraints_copy(sc: uintptr_t) -> uintptr_t;
22
23    fn isl_schedule_constraints_dump(sc: uintptr_t) -> ();
24
25    fn isl_schedule_constraints_free(sc: uintptr_t) -> uintptr_t;
26
27    fn isl_schedule_constraints_get_coincidence(sc: uintptr_t) -> uintptr_t;
28
29    fn isl_schedule_constraints_get_conditional_validity(sc: uintptr_t) -> uintptr_t;
30
31    fn isl_schedule_constraints_get_conditional_validity_condition(sc: uintptr_t) -> uintptr_t;
32
33    fn isl_schedule_constraints_get_context(sc: uintptr_t) -> uintptr_t;
34
35    fn isl_schedule_constraints_get_ctx(sc: uintptr_t) -> uintptr_t;
36
37    fn isl_schedule_constraints_get_domain(sc: uintptr_t) -> uintptr_t;
38
39    fn isl_schedule_constraints_get_proximity(sc: uintptr_t) -> uintptr_t;
40
41    fn isl_schedule_constraints_get_validity(sc: uintptr_t) -> uintptr_t;
42
43    fn isl_schedule_constraints_on_domain(domain: uintptr_t) -> uintptr_t;
44
45    fn isl_schedule_constraints_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
46
47    fn isl_schedule_constraints_set_coincidence(sc: uintptr_t, coincidence: uintptr_t)
48                                                -> uintptr_t;
49
50    fn isl_schedule_constraints_set_conditional_validity(sc: uintptr_t, condition: uintptr_t,
51                                                         validity: uintptr_t)
52                                                         -> uintptr_t;
53
54    fn isl_schedule_constraints_set_context(sc: uintptr_t, context: uintptr_t) -> uintptr_t;
55
56    fn isl_schedule_constraints_set_proximity(sc: uintptr_t, proximity: uintptr_t) -> uintptr_t;
57
58    fn isl_schedule_constraints_set_validity(sc: uintptr_t, validity: uintptr_t) -> uintptr_t;
59
60    fn isl_schedule_constraints_to_str(sc: uintptr_t) -> *const c_char;
61
62}
63
64impl ScheduleConstraints {
65    /// Wraps `isl_schedule_constraints_apply`.
66    pub fn apply(self, umap: UnionMap) -> Result<ScheduleConstraints, LibISLError> {
67        let sc = self;
68        let isl_rs_ctx = sc.get_ctx();
69        let mut sc = sc;
70        sc.do_not_free_on_drop();
71        let sc = sc.ptr;
72        let mut umap = umap;
73        umap.do_not_free_on_drop();
74        let umap = umap.ptr;
75        let isl_rs_result = unsafe { isl_schedule_constraints_apply(sc, umap) };
76        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
77                                                  should_free_on_drop: true };
78        let err = isl_rs_ctx.last_error();
79        if err != Error::None_ {
80            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
81        }
82        Ok(isl_rs_result)
83    }
84
85    /// Wraps `isl_schedule_constraints_compute_schedule`.
86    pub fn compute_schedule(self) -> Result<Schedule, LibISLError> {
87        let sc = self;
88        let isl_rs_ctx = sc.get_ctx();
89        let mut sc = sc;
90        sc.do_not_free_on_drop();
91        let sc = sc.ptr;
92        let isl_rs_result = unsafe { isl_schedule_constraints_compute_schedule(sc) };
93        let isl_rs_result = Schedule { ptr: isl_rs_result,
94                                       should_free_on_drop: true };
95        let err = isl_rs_ctx.last_error();
96        if err != Error::None_ {
97            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
98        }
99        Ok(isl_rs_result)
100    }
101
102    /// Wraps `isl_schedule_constraints_copy`.
103    pub fn copy(&self) -> Result<ScheduleConstraints, LibISLError> {
104        let sc = self;
105        let isl_rs_ctx = sc.get_ctx();
106        let sc = sc.ptr;
107        let isl_rs_result = unsafe { isl_schedule_constraints_copy(sc) };
108        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
109                                                  should_free_on_drop: true };
110        let err = isl_rs_ctx.last_error();
111        if err != Error::None_ {
112            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
113        }
114        Ok(isl_rs_result)
115    }
116
117    /// Wraps `isl_schedule_constraints_dump`.
118    pub fn dump(&self) -> Result<(), LibISLError> {
119        let sc = self;
120        let isl_rs_ctx = sc.get_ctx();
121        let sc = sc.ptr;
122        let isl_rs_result = unsafe { isl_schedule_constraints_dump(sc) };
123        let err = isl_rs_ctx.last_error();
124        if err != Error::None_ {
125            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
126        }
127        Ok(isl_rs_result)
128    }
129
130    /// Wraps `isl_schedule_constraints_free`.
131    pub fn free(self) -> Result<ScheduleConstraints, LibISLError> {
132        let sc = self;
133        let isl_rs_ctx = sc.get_ctx();
134        let mut sc = sc;
135        sc.do_not_free_on_drop();
136        let sc = sc.ptr;
137        let isl_rs_result = unsafe { isl_schedule_constraints_free(sc) };
138        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
139                                                  should_free_on_drop: true };
140        let err = isl_rs_ctx.last_error();
141        if err != Error::None_ {
142            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
143        }
144        Ok(isl_rs_result)
145    }
146
147    /// Wraps `isl_schedule_constraints_get_coincidence`.
148    pub fn get_coincidence(&self) -> Result<UnionMap, LibISLError> {
149        let sc = self;
150        let isl_rs_ctx = sc.get_ctx();
151        let sc = sc.ptr;
152        let isl_rs_result = unsafe { isl_schedule_constraints_get_coincidence(sc) };
153        let isl_rs_result = UnionMap { ptr: isl_rs_result,
154                                       should_free_on_drop: true };
155        let err = isl_rs_ctx.last_error();
156        if err != Error::None_ {
157            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
158        }
159        Ok(isl_rs_result)
160    }
161
162    /// Wraps `isl_schedule_constraints_get_conditional_validity`.
163    pub fn get_conditional_validity(&self) -> Result<UnionMap, LibISLError> {
164        let sc = self;
165        let isl_rs_ctx = sc.get_ctx();
166        let sc = sc.ptr;
167        let isl_rs_result = unsafe { isl_schedule_constraints_get_conditional_validity(sc) };
168        let isl_rs_result = UnionMap { ptr: isl_rs_result,
169                                       should_free_on_drop: true };
170        let err = isl_rs_ctx.last_error();
171        if err != Error::None_ {
172            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
173        }
174        Ok(isl_rs_result)
175    }
176
177    /// Wraps `isl_schedule_constraints_get_conditional_validity_condition`.
178    pub fn get_conditional_validity_condition(&self) -> Result<UnionMap, LibISLError> {
179        let sc = self;
180        let isl_rs_ctx = sc.get_ctx();
181        let sc = sc.ptr;
182        let isl_rs_result =
183            unsafe { isl_schedule_constraints_get_conditional_validity_condition(sc) };
184        let isl_rs_result = UnionMap { ptr: isl_rs_result,
185                                       should_free_on_drop: true };
186        let err = isl_rs_ctx.last_error();
187        if err != Error::None_ {
188            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
189        }
190        Ok(isl_rs_result)
191    }
192
193    /// Wraps `isl_schedule_constraints_get_context`.
194    pub fn get_context(&self) -> Result<Set, LibISLError> {
195        let sc = self;
196        let isl_rs_ctx = sc.get_ctx();
197        let sc = sc.ptr;
198        let isl_rs_result = unsafe { isl_schedule_constraints_get_context(sc) };
199        let isl_rs_result = Set { ptr: isl_rs_result,
200                                  should_free_on_drop: true };
201        let err = isl_rs_ctx.last_error();
202        if err != Error::None_ {
203            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
204        }
205        Ok(isl_rs_result)
206    }
207
208    /// Wraps `isl_schedule_constraints_get_ctx`.
209    pub fn get_ctx(&self) -> Context {
210        let sc = self;
211        let sc = sc.ptr;
212        let isl_rs_result = unsafe { isl_schedule_constraints_get_ctx(sc) };
213        let isl_rs_result = Context { ptr: isl_rs_result,
214                                      should_free_on_drop: false };
215        isl_rs_result
216    }
217
218    /// Wraps `isl_schedule_constraints_get_domain`.
219    pub fn get_domain(&self) -> Result<UnionSet, LibISLError> {
220        let sc = self;
221        let isl_rs_ctx = sc.get_ctx();
222        let sc = sc.ptr;
223        let isl_rs_result = unsafe { isl_schedule_constraints_get_domain(sc) };
224        let isl_rs_result = UnionSet { ptr: isl_rs_result,
225                                       should_free_on_drop: true };
226        let err = isl_rs_ctx.last_error();
227        if err != Error::None_ {
228            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
229        }
230        Ok(isl_rs_result)
231    }
232
233    /// Wraps `isl_schedule_constraints_get_proximity`.
234    pub fn get_proximity(&self) -> Result<UnionMap, LibISLError> {
235        let sc = self;
236        let isl_rs_ctx = sc.get_ctx();
237        let sc = sc.ptr;
238        let isl_rs_result = unsafe { isl_schedule_constraints_get_proximity(sc) };
239        let isl_rs_result = UnionMap { ptr: isl_rs_result,
240                                       should_free_on_drop: true };
241        let err = isl_rs_ctx.last_error();
242        if err != Error::None_ {
243            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
244        }
245        Ok(isl_rs_result)
246    }
247
248    /// Wraps `isl_schedule_constraints_get_validity`.
249    pub fn get_validity(&self) -> Result<UnionMap, LibISLError> {
250        let sc = self;
251        let isl_rs_ctx = sc.get_ctx();
252        let sc = sc.ptr;
253        let isl_rs_result = unsafe { isl_schedule_constraints_get_validity(sc) };
254        let isl_rs_result = UnionMap { ptr: isl_rs_result,
255                                       should_free_on_drop: true };
256        let err = isl_rs_ctx.last_error();
257        if err != Error::None_ {
258            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
259        }
260        Ok(isl_rs_result)
261    }
262
263    /// Wraps `isl_schedule_constraints_on_domain`.
264    pub fn on_domain(domain: UnionSet) -> Result<ScheduleConstraints, LibISLError> {
265        let isl_rs_ctx = domain.get_ctx();
266        let mut domain = domain;
267        domain.do_not_free_on_drop();
268        let domain = domain.ptr;
269        let isl_rs_result = unsafe { isl_schedule_constraints_on_domain(domain) };
270        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
271                                                  should_free_on_drop: true };
272        let err = isl_rs_ctx.last_error();
273        if err != Error::None_ {
274            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
275        }
276        Ok(isl_rs_result)
277    }
278
279    /// Wraps `isl_schedule_constraints_read_from_str`.
280    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<ScheduleConstraints, LibISLError> {
281        let isl_rs_ctx = Context { ptr: ctx.ptr,
282                                   should_free_on_drop: false };
283        let ctx = ctx.ptr;
284        let str_ = CString::new(str_).unwrap();
285        let str_ = str_.as_ptr();
286        let isl_rs_result = unsafe { isl_schedule_constraints_read_from_str(ctx, str_) };
287        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
288                                                  should_free_on_drop: true };
289        let err = isl_rs_ctx.last_error();
290        if err != Error::None_ {
291            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
292        }
293        Ok(isl_rs_result)
294    }
295
296    /// Wraps `isl_schedule_constraints_set_coincidence`.
297    pub fn set_coincidence(self, coincidence: UnionMap)
298                           -> Result<ScheduleConstraints, LibISLError> {
299        let sc = self;
300        let isl_rs_ctx = sc.get_ctx();
301        let mut sc = sc;
302        sc.do_not_free_on_drop();
303        let sc = sc.ptr;
304        let mut coincidence = coincidence;
305        coincidence.do_not_free_on_drop();
306        let coincidence = coincidence.ptr;
307        let isl_rs_result = unsafe { isl_schedule_constraints_set_coincidence(sc, coincidence) };
308        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
309                                                  should_free_on_drop: true };
310        let err = isl_rs_ctx.last_error();
311        if err != Error::None_ {
312            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
313        }
314        Ok(isl_rs_result)
315    }
316
317    /// Wraps `isl_schedule_constraints_set_conditional_validity`.
318    pub fn set_conditional_validity(self, condition: UnionMap, validity: UnionMap)
319                                    -> Result<ScheduleConstraints, LibISLError> {
320        let sc = self;
321        let isl_rs_ctx = sc.get_ctx();
322        let mut sc = sc;
323        sc.do_not_free_on_drop();
324        let sc = sc.ptr;
325        let mut condition = condition;
326        condition.do_not_free_on_drop();
327        let condition = condition.ptr;
328        let mut validity = validity;
329        validity.do_not_free_on_drop();
330        let validity = validity.ptr;
331        let isl_rs_result =
332            unsafe { isl_schedule_constraints_set_conditional_validity(sc, condition, validity) };
333        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
334                                                  should_free_on_drop: true };
335        let err = isl_rs_ctx.last_error();
336        if err != Error::None_ {
337            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
338        }
339        Ok(isl_rs_result)
340    }
341
342    /// Wraps `isl_schedule_constraints_set_context`.
343    pub fn set_context(self, context: Set) -> Result<ScheduleConstraints, LibISLError> {
344        let sc = self;
345        let isl_rs_ctx = sc.get_ctx();
346        let mut sc = sc;
347        sc.do_not_free_on_drop();
348        let sc = sc.ptr;
349        let mut context = context;
350        context.do_not_free_on_drop();
351        let context = context.ptr;
352        let isl_rs_result = unsafe { isl_schedule_constraints_set_context(sc, context) };
353        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
354                                                  should_free_on_drop: true };
355        let err = isl_rs_ctx.last_error();
356        if err != Error::None_ {
357            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
358        }
359        Ok(isl_rs_result)
360    }
361
362    /// Wraps `isl_schedule_constraints_set_proximity`.
363    pub fn set_proximity(self, proximity: UnionMap) -> Result<ScheduleConstraints, LibISLError> {
364        let sc = self;
365        let isl_rs_ctx = sc.get_ctx();
366        let mut sc = sc;
367        sc.do_not_free_on_drop();
368        let sc = sc.ptr;
369        let mut proximity = proximity;
370        proximity.do_not_free_on_drop();
371        let proximity = proximity.ptr;
372        let isl_rs_result = unsafe { isl_schedule_constraints_set_proximity(sc, proximity) };
373        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
374                                                  should_free_on_drop: true };
375        let err = isl_rs_ctx.last_error();
376        if err != Error::None_ {
377            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
378        }
379        Ok(isl_rs_result)
380    }
381
382    /// Wraps `isl_schedule_constraints_set_validity`.
383    pub fn set_validity(self, validity: UnionMap) -> Result<ScheduleConstraints, LibISLError> {
384        let sc = self;
385        let isl_rs_ctx = sc.get_ctx();
386        let mut sc = sc;
387        sc.do_not_free_on_drop();
388        let sc = sc.ptr;
389        let mut validity = validity;
390        validity.do_not_free_on_drop();
391        let validity = validity.ptr;
392        let isl_rs_result = unsafe { isl_schedule_constraints_set_validity(sc, validity) };
393        let isl_rs_result = ScheduleConstraints { ptr: isl_rs_result,
394                                                  should_free_on_drop: true };
395        let err = isl_rs_ctx.last_error();
396        if err != Error::None_ {
397            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
398        }
399        Ok(isl_rs_result)
400    }
401
402    /// Wraps `isl_schedule_constraints_to_str`.
403    pub fn to_str(&self) -> Result<&str, LibISLError> {
404        let sc = self;
405        let isl_rs_ctx = sc.get_ctx();
406        let sc = sc.ptr;
407        let isl_rs_result = unsafe { isl_schedule_constraints_to_str(sc) };
408        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
409        let isl_rs_result = isl_rs_result.to_str().unwrap();
410        let err = isl_rs_ctx.last_error();
411        if err != Error::None_ {
412            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
413        }
414        Ok(isl_rs_result)
415    }
416
417    /// Does not call isl_schedule_constraints_free() on being dropped. (For
418    /// internal use only.)
419    pub fn do_not_free_on_drop(&mut self) {
420        self.should_free_on_drop = false;
421    }
422}
423
424impl Drop for ScheduleConstraints {
425    fn drop(&mut self) {
426        if self.should_free_on_drop {
427            unsafe {
428                isl_schedule_constraints_free(self.ptr);
429            }
430        }
431    }
432}