1use super::{Context, Error, LibISLError, Stat};
5use libc::uintptr_t;
6use std::ffi::{CStr, CString};
7use std::os::raw::c_char;
8
9pub struct Options {
11 pub ptr: uintptr_t,
12 pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17 fn isl_options_free(opt: uintptr_t) -> ();
18
19 fn isl_options_get_ast_always_print_block(ctx: uintptr_t) -> i32;
20
21 fn isl_options_get_ast_iterator_type(ctx: uintptr_t) -> *const c_char;
22
23 fn isl_options_get_ast_print_macro_once(ctx: uintptr_t) -> i32;
24
25 fn isl_options_get_ast_print_outermost_block(ctx: uintptr_t) -> i32;
26
27 fn isl_options_get_bound(ctx: uintptr_t) -> i32;
28
29 fn isl_options_get_coalesce_bounded_wrapping(ctx: uintptr_t) -> i32;
30
31 fn isl_options_get_coalesce_preserve_locals(ctx: uintptr_t) -> i32;
32
33 fn isl_options_get_gbr_only_first(ctx: uintptr_t) -> i32;
34
35 fn isl_options_get_on_error(ctx: uintptr_t) -> i32;
36
37 fn isl_options_get_pip_symmetry(ctx: uintptr_t) -> i32;
38
39 fn isl_options_get_schedule_algorithm(ctx: uintptr_t) -> i32;
40
41 fn isl_options_get_schedule_carry_self_first(ctx: uintptr_t) -> i32;
42
43 fn isl_options_get_schedule_max_coefficient(ctx: uintptr_t) -> i32;
44
45 fn isl_options_get_schedule_max_constant_term(ctx: uintptr_t) -> i32;
46
47 fn isl_options_get_schedule_maximize_band_depth(ctx: uintptr_t) -> i32;
48
49 fn isl_options_get_schedule_maximize_coincidence(ctx: uintptr_t) -> i32;
50
51 fn isl_options_get_schedule_outer_coincidence(ctx: uintptr_t) -> i32;
52
53 fn isl_options_get_schedule_separate_components(ctx: uintptr_t) -> i32;
54
55 fn isl_options_get_schedule_serialize_sccs(ctx: uintptr_t) -> i32;
56
57 fn isl_options_get_schedule_split_scaled(ctx: uintptr_t) -> i32;
58
59 fn isl_options_get_schedule_treat_coalescing(ctx: uintptr_t) -> i32;
60
61 fn isl_options_get_schedule_whole_component(ctx: uintptr_t) -> i32;
62
63 fn isl_options_get_tile_scale_tile_loops(ctx: uintptr_t) -> i32;
64
65 fn isl_options_get_tile_shift_point_loops(ctx: uintptr_t) -> i32;
66
67 fn isl_options_new_with_defaults() -> uintptr_t;
68
69 fn isl_options_set_ast_always_print_block(ctx: uintptr_t, val: i32) -> i32;
70
71 fn isl_options_set_ast_iterator_type(ctx: uintptr_t, val: *const c_char) -> i32;
72
73 fn isl_options_set_ast_print_macro_once(ctx: uintptr_t, val: i32) -> i32;
74
75 fn isl_options_set_ast_print_outermost_block(ctx: uintptr_t, val: i32) -> i32;
76
77 fn isl_options_set_bound(ctx: uintptr_t, val: i32) -> i32;
78
79 fn isl_options_set_coalesce_bounded_wrapping(ctx: uintptr_t, val: i32) -> i32;
80
81 fn isl_options_set_coalesce_preserve_locals(ctx: uintptr_t, val: i32) -> i32;
82
83 fn isl_options_set_gbr_only_first(ctx: uintptr_t, val: i32) -> i32;
84
85 fn isl_options_set_on_error(ctx: uintptr_t, val: i32) -> i32;
86
87 fn isl_options_set_pip_symmetry(ctx: uintptr_t, val: i32) -> i32;
88
89 fn isl_options_set_schedule_algorithm(ctx: uintptr_t, val: i32) -> i32;
90
91 fn isl_options_set_schedule_carry_self_first(ctx: uintptr_t, val: i32) -> i32;
92
93 fn isl_options_set_schedule_max_coefficient(ctx: uintptr_t, val: i32) -> i32;
94
95 fn isl_options_set_schedule_max_constant_term(ctx: uintptr_t, val: i32) -> i32;
96
97 fn isl_options_set_schedule_maximize_band_depth(ctx: uintptr_t, val: i32) -> i32;
98
99 fn isl_options_set_schedule_maximize_coincidence(ctx: uintptr_t, val: i32) -> i32;
100
101 fn isl_options_set_schedule_outer_coincidence(ctx: uintptr_t, val: i32) -> i32;
102
103 fn isl_options_set_schedule_separate_components(ctx: uintptr_t, val: i32) -> i32;
104
105 fn isl_options_set_schedule_serialize_sccs(ctx: uintptr_t, val: i32) -> i32;
106
107 fn isl_options_set_schedule_split_scaled(ctx: uintptr_t, val: i32) -> i32;
108
109 fn isl_options_set_schedule_treat_coalescing(ctx: uintptr_t, val: i32) -> i32;
110
111 fn isl_options_set_schedule_whole_component(ctx: uintptr_t, val: i32) -> i32;
112
113 fn isl_options_set_tile_scale_tile_loops(ctx: uintptr_t, val: i32) -> i32;
114
115 fn isl_options_set_tile_shift_point_loops(ctx: uintptr_t, val: i32) -> i32;
116
117}
118
119impl Options {
120 pub fn free(self) -> () {
122 let opt = self;
123 let mut opt = opt;
124 opt.do_not_free_on_drop();
125 let opt = opt.ptr;
126 let isl_rs_result = unsafe { isl_options_free(opt) };
127 isl_rs_result
128 }
129
130 pub fn get_ast_always_print_block(ctx: &Context) -> Result<i32, LibISLError> {
132 let isl_rs_ctx = Context { ptr: ctx.ptr,
133 should_free_on_drop: false };
134 let ctx = ctx.ptr;
135 let isl_rs_result = unsafe { isl_options_get_ast_always_print_block(ctx) };
136 let err = isl_rs_ctx.last_error();
137 if err != Error::None_ {
138 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
139 }
140 Ok(isl_rs_result)
141 }
142
143 pub fn get_ast_iterator_type(ctx: &Context) -> Result<&str, LibISLError> {
145 let isl_rs_ctx = Context { ptr: ctx.ptr,
146 should_free_on_drop: false };
147 let ctx = ctx.ptr;
148 let isl_rs_result = unsafe { isl_options_get_ast_iterator_type(ctx) };
149 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
150 let isl_rs_result = isl_rs_result.to_str().unwrap();
151 let err = isl_rs_ctx.last_error();
152 if err != Error::None_ {
153 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
154 }
155 Ok(isl_rs_result)
156 }
157
158 pub fn get_ast_print_macro_once(ctx: &Context) -> Result<i32, LibISLError> {
160 let isl_rs_ctx = Context { ptr: ctx.ptr,
161 should_free_on_drop: false };
162 let ctx = ctx.ptr;
163 let isl_rs_result = unsafe { isl_options_get_ast_print_macro_once(ctx) };
164 let err = isl_rs_ctx.last_error();
165 if err != Error::None_ {
166 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
167 }
168 Ok(isl_rs_result)
169 }
170
171 pub fn get_ast_print_outermost_block(ctx: &Context) -> Result<i32, LibISLError> {
173 let isl_rs_ctx = Context { ptr: ctx.ptr,
174 should_free_on_drop: false };
175 let ctx = ctx.ptr;
176 let isl_rs_result = unsafe { isl_options_get_ast_print_outermost_block(ctx) };
177 let err = isl_rs_ctx.last_error();
178 if err != Error::None_ {
179 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
180 }
181 Ok(isl_rs_result)
182 }
183
184 pub fn get_bound(ctx: &Context) -> Result<i32, LibISLError> {
186 let isl_rs_ctx = Context { ptr: ctx.ptr,
187 should_free_on_drop: false };
188 let ctx = ctx.ptr;
189 let isl_rs_result = unsafe { isl_options_get_bound(ctx) };
190 let err = isl_rs_ctx.last_error();
191 if err != Error::None_ {
192 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
193 }
194 Ok(isl_rs_result)
195 }
196
197 pub fn get_coalesce_bounded_wrapping(ctx: &Context) -> Result<i32, LibISLError> {
199 let isl_rs_ctx = Context { ptr: ctx.ptr,
200 should_free_on_drop: false };
201 let ctx = ctx.ptr;
202 let isl_rs_result = unsafe { isl_options_get_coalesce_bounded_wrapping(ctx) };
203 let err = isl_rs_ctx.last_error();
204 if err != Error::None_ {
205 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
206 }
207 Ok(isl_rs_result)
208 }
209
210 pub fn get_coalesce_preserve_locals(ctx: &Context) -> Result<i32, LibISLError> {
212 let isl_rs_ctx = Context { ptr: ctx.ptr,
213 should_free_on_drop: false };
214 let ctx = ctx.ptr;
215 let isl_rs_result = unsafe { isl_options_get_coalesce_preserve_locals(ctx) };
216 let err = isl_rs_ctx.last_error();
217 if err != Error::None_ {
218 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
219 }
220 Ok(isl_rs_result)
221 }
222
223 pub fn get_gbr_only_first(ctx: &Context) -> Result<i32, LibISLError> {
225 let isl_rs_ctx = Context { ptr: ctx.ptr,
226 should_free_on_drop: false };
227 let ctx = ctx.ptr;
228 let isl_rs_result = unsafe { isl_options_get_gbr_only_first(ctx) };
229 let err = isl_rs_ctx.last_error();
230 if err != Error::None_ {
231 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
232 }
233 Ok(isl_rs_result)
234 }
235
236 pub fn get_on_error(ctx: &Context) -> Result<i32, LibISLError> {
238 let isl_rs_ctx = Context { ptr: ctx.ptr,
239 should_free_on_drop: false };
240 let ctx = ctx.ptr;
241 let isl_rs_result = unsafe { isl_options_get_on_error(ctx) };
242 let err = isl_rs_ctx.last_error();
243 if err != Error::None_ {
244 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
245 }
246 Ok(isl_rs_result)
247 }
248
249 pub fn get_pip_symmetry(ctx: &Context) -> Result<i32, LibISLError> {
251 let isl_rs_ctx = Context { ptr: ctx.ptr,
252 should_free_on_drop: false };
253 let ctx = ctx.ptr;
254 let isl_rs_result = unsafe { isl_options_get_pip_symmetry(ctx) };
255 let err = isl_rs_ctx.last_error();
256 if err != Error::None_ {
257 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
258 }
259 Ok(isl_rs_result)
260 }
261
262 pub fn get_schedule_algorithm(ctx: &Context) -> Result<i32, LibISLError> {
264 let isl_rs_ctx = Context { ptr: ctx.ptr,
265 should_free_on_drop: false };
266 let ctx = ctx.ptr;
267 let isl_rs_result = unsafe { isl_options_get_schedule_algorithm(ctx) };
268 let err = isl_rs_ctx.last_error();
269 if err != Error::None_ {
270 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
271 }
272 Ok(isl_rs_result)
273 }
274
275 pub fn get_schedule_carry_self_first(ctx: &Context) -> Result<i32, LibISLError> {
277 let isl_rs_ctx = Context { ptr: ctx.ptr,
278 should_free_on_drop: false };
279 let ctx = ctx.ptr;
280 let isl_rs_result = unsafe { isl_options_get_schedule_carry_self_first(ctx) };
281 let err = isl_rs_ctx.last_error();
282 if err != Error::None_ {
283 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
284 }
285 Ok(isl_rs_result)
286 }
287
288 pub fn get_schedule_max_coefficient(ctx: &Context) -> Result<i32, LibISLError> {
290 let isl_rs_ctx = Context { ptr: ctx.ptr,
291 should_free_on_drop: false };
292 let ctx = ctx.ptr;
293 let isl_rs_result = unsafe { isl_options_get_schedule_max_coefficient(ctx) };
294 let err = isl_rs_ctx.last_error();
295 if err != Error::None_ {
296 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
297 }
298 Ok(isl_rs_result)
299 }
300
301 pub fn get_schedule_max_constant_term(ctx: &Context) -> Result<i32, LibISLError> {
303 let isl_rs_ctx = Context { ptr: ctx.ptr,
304 should_free_on_drop: false };
305 let ctx = ctx.ptr;
306 let isl_rs_result = unsafe { isl_options_get_schedule_max_constant_term(ctx) };
307 let err = isl_rs_ctx.last_error();
308 if err != Error::None_ {
309 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
310 }
311 Ok(isl_rs_result)
312 }
313
314 pub fn get_schedule_maximize_band_depth(ctx: &Context) -> Result<i32, LibISLError> {
316 let isl_rs_ctx = Context { ptr: ctx.ptr,
317 should_free_on_drop: false };
318 let ctx = ctx.ptr;
319 let isl_rs_result = unsafe { isl_options_get_schedule_maximize_band_depth(ctx) };
320 let err = isl_rs_ctx.last_error();
321 if err != Error::None_ {
322 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
323 }
324 Ok(isl_rs_result)
325 }
326
327 pub fn get_schedule_maximize_coincidence(ctx: &Context) -> Result<i32, LibISLError> {
329 let isl_rs_ctx = Context { ptr: ctx.ptr,
330 should_free_on_drop: false };
331 let ctx = ctx.ptr;
332 let isl_rs_result = unsafe { isl_options_get_schedule_maximize_coincidence(ctx) };
333 let err = isl_rs_ctx.last_error();
334 if err != Error::None_ {
335 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
336 }
337 Ok(isl_rs_result)
338 }
339
340 pub fn get_schedule_outer_coincidence(ctx: &Context) -> Result<i32, LibISLError> {
342 let isl_rs_ctx = Context { ptr: ctx.ptr,
343 should_free_on_drop: false };
344 let ctx = ctx.ptr;
345 let isl_rs_result = unsafe { isl_options_get_schedule_outer_coincidence(ctx) };
346 let err = isl_rs_ctx.last_error();
347 if err != Error::None_ {
348 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
349 }
350 Ok(isl_rs_result)
351 }
352
353 pub fn get_schedule_separate_components(ctx: &Context) -> Result<i32, LibISLError> {
355 let isl_rs_ctx = Context { ptr: ctx.ptr,
356 should_free_on_drop: false };
357 let ctx = ctx.ptr;
358 let isl_rs_result = unsafe { isl_options_get_schedule_separate_components(ctx) };
359 let err = isl_rs_ctx.last_error();
360 if err != Error::None_ {
361 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
362 }
363 Ok(isl_rs_result)
364 }
365
366 pub fn get_schedule_serialize_sccs(ctx: &Context) -> Result<i32, LibISLError> {
368 let isl_rs_ctx = Context { ptr: ctx.ptr,
369 should_free_on_drop: false };
370 let ctx = ctx.ptr;
371 let isl_rs_result = unsafe { isl_options_get_schedule_serialize_sccs(ctx) };
372 let err = isl_rs_ctx.last_error();
373 if err != Error::None_ {
374 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
375 }
376 Ok(isl_rs_result)
377 }
378
379 pub fn get_schedule_split_scaled(ctx: &Context) -> Result<i32, LibISLError> {
381 let isl_rs_ctx = Context { ptr: ctx.ptr,
382 should_free_on_drop: false };
383 let ctx = ctx.ptr;
384 let isl_rs_result = unsafe { isl_options_get_schedule_split_scaled(ctx) };
385 let err = isl_rs_ctx.last_error();
386 if err != Error::None_ {
387 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
388 }
389 Ok(isl_rs_result)
390 }
391
392 pub fn get_schedule_treat_coalescing(ctx: &Context) -> Result<i32, LibISLError> {
394 let isl_rs_ctx = Context { ptr: ctx.ptr,
395 should_free_on_drop: false };
396 let ctx = ctx.ptr;
397 let isl_rs_result = unsafe { isl_options_get_schedule_treat_coalescing(ctx) };
398 let err = isl_rs_ctx.last_error();
399 if err != Error::None_ {
400 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
401 }
402 Ok(isl_rs_result)
403 }
404
405 pub fn get_schedule_whole_component(ctx: &Context) -> Result<i32, LibISLError> {
407 let isl_rs_ctx = Context { ptr: ctx.ptr,
408 should_free_on_drop: false };
409 let ctx = ctx.ptr;
410 let isl_rs_result = unsafe { isl_options_get_schedule_whole_component(ctx) };
411 let err = isl_rs_ctx.last_error();
412 if err != Error::None_ {
413 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
414 }
415 Ok(isl_rs_result)
416 }
417
418 pub fn get_tile_scale_tile_loops(ctx: &Context) -> Result<i32, LibISLError> {
420 let isl_rs_ctx = Context { ptr: ctx.ptr,
421 should_free_on_drop: false };
422 let ctx = ctx.ptr;
423 let isl_rs_result = unsafe { isl_options_get_tile_scale_tile_loops(ctx) };
424 let err = isl_rs_ctx.last_error();
425 if err != Error::None_ {
426 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
427 }
428 Ok(isl_rs_result)
429 }
430
431 pub fn get_tile_shift_point_loops(ctx: &Context) -> Result<i32, LibISLError> {
433 let isl_rs_ctx = Context { ptr: ctx.ptr,
434 should_free_on_drop: false };
435 let ctx = ctx.ptr;
436 let isl_rs_result = unsafe { isl_options_get_tile_shift_point_loops(ctx) };
437 let err = isl_rs_ctx.last_error();
438 if err != Error::None_ {
439 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
440 }
441 Ok(isl_rs_result)
442 }
443
444 pub fn new_with_defaults() -> Options {
446 let isl_rs_result = unsafe { isl_options_new_with_defaults() };
447 let isl_rs_result = Options { ptr: isl_rs_result,
448 should_free_on_drop: true };
449 isl_rs_result
450 }
451
452 pub fn set_ast_always_print_block(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
454 let isl_rs_ctx = Context { ptr: ctx.ptr,
455 should_free_on_drop: false };
456 let ctx = ctx.ptr;
457 let isl_rs_result = unsafe { isl_options_set_ast_always_print_block(ctx, val) };
458 let isl_rs_result = Stat::from_i32(isl_rs_result);
459 let err = isl_rs_ctx.last_error();
460 if err != Error::None_ {
461 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
462 }
463 Ok(isl_rs_result)
464 }
465
466 pub fn set_ast_iterator_type(ctx: &Context, val: &str) -> Result<Stat, LibISLError> {
468 let isl_rs_ctx = Context { ptr: ctx.ptr,
469 should_free_on_drop: false };
470 let ctx = ctx.ptr;
471 let val = CString::new(val).unwrap();
472 let val = val.as_ptr();
473 let isl_rs_result = unsafe { isl_options_set_ast_iterator_type(ctx, val) };
474 let isl_rs_result = Stat::from_i32(isl_rs_result);
475 let err = isl_rs_ctx.last_error();
476 if err != Error::None_ {
477 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
478 }
479 Ok(isl_rs_result)
480 }
481
482 pub fn set_ast_print_macro_once(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
484 let isl_rs_ctx = Context { ptr: ctx.ptr,
485 should_free_on_drop: false };
486 let ctx = ctx.ptr;
487 let isl_rs_result = unsafe { isl_options_set_ast_print_macro_once(ctx, val) };
488 let isl_rs_result = Stat::from_i32(isl_rs_result);
489 let err = isl_rs_ctx.last_error();
490 if err != Error::None_ {
491 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
492 }
493 Ok(isl_rs_result)
494 }
495
496 pub fn set_ast_print_outermost_block(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
498 let isl_rs_ctx = Context { ptr: ctx.ptr,
499 should_free_on_drop: false };
500 let ctx = ctx.ptr;
501 let isl_rs_result = unsafe { isl_options_set_ast_print_outermost_block(ctx, val) };
502 let isl_rs_result = Stat::from_i32(isl_rs_result);
503 let err = isl_rs_ctx.last_error();
504 if err != Error::None_ {
505 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
506 }
507 Ok(isl_rs_result)
508 }
509
510 pub fn set_bound(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
512 let isl_rs_ctx = Context { ptr: ctx.ptr,
513 should_free_on_drop: false };
514 let ctx = ctx.ptr;
515 let isl_rs_result = unsafe { isl_options_set_bound(ctx, val) };
516 let isl_rs_result = Stat::from_i32(isl_rs_result);
517 let err = isl_rs_ctx.last_error();
518 if err != Error::None_ {
519 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
520 }
521 Ok(isl_rs_result)
522 }
523
524 pub fn set_coalesce_bounded_wrapping(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
526 let isl_rs_ctx = Context { ptr: ctx.ptr,
527 should_free_on_drop: false };
528 let ctx = ctx.ptr;
529 let isl_rs_result = unsafe { isl_options_set_coalesce_bounded_wrapping(ctx, val) };
530 let isl_rs_result = Stat::from_i32(isl_rs_result);
531 let err = isl_rs_ctx.last_error();
532 if err != Error::None_ {
533 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
534 }
535 Ok(isl_rs_result)
536 }
537
538 pub fn set_coalesce_preserve_locals(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
540 let isl_rs_ctx = Context { ptr: ctx.ptr,
541 should_free_on_drop: false };
542 let ctx = ctx.ptr;
543 let isl_rs_result = unsafe { isl_options_set_coalesce_preserve_locals(ctx, val) };
544 let isl_rs_result = Stat::from_i32(isl_rs_result);
545 let err = isl_rs_ctx.last_error();
546 if err != Error::None_ {
547 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
548 }
549 Ok(isl_rs_result)
550 }
551
552 pub fn set_gbr_only_first(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
554 let isl_rs_ctx = Context { ptr: ctx.ptr,
555 should_free_on_drop: false };
556 let ctx = ctx.ptr;
557 let isl_rs_result = unsafe { isl_options_set_gbr_only_first(ctx, val) };
558 let isl_rs_result = Stat::from_i32(isl_rs_result);
559 let err = isl_rs_ctx.last_error();
560 if err != Error::None_ {
561 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
562 }
563 Ok(isl_rs_result)
564 }
565
566 pub fn set_on_error(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
568 let isl_rs_ctx = Context { ptr: ctx.ptr,
569 should_free_on_drop: false };
570 let ctx = ctx.ptr;
571 let isl_rs_result = unsafe { isl_options_set_on_error(ctx, val) };
572 let isl_rs_result = Stat::from_i32(isl_rs_result);
573 let err = isl_rs_ctx.last_error();
574 if err != Error::None_ {
575 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
576 }
577 Ok(isl_rs_result)
578 }
579
580 pub fn set_pip_symmetry(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
582 let isl_rs_ctx = Context { ptr: ctx.ptr,
583 should_free_on_drop: false };
584 let ctx = ctx.ptr;
585 let isl_rs_result = unsafe { isl_options_set_pip_symmetry(ctx, val) };
586 let isl_rs_result = Stat::from_i32(isl_rs_result);
587 let err = isl_rs_ctx.last_error();
588 if err != Error::None_ {
589 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
590 }
591 Ok(isl_rs_result)
592 }
593
594 pub fn set_schedule_algorithm(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
596 let isl_rs_ctx = Context { ptr: ctx.ptr,
597 should_free_on_drop: false };
598 let ctx = ctx.ptr;
599 let isl_rs_result = unsafe { isl_options_set_schedule_algorithm(ctx, val) };
600 let isl_rs_result = Stat::from_i32(isl_rs_result);
601 let err = isl_rs_ctx.last_error();
602 if err != Error::None_ {
603 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
604 }
605 Ok(isl_rs_result)
606 }
607
608 pub fn set_schedule_carry_self_first(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
610 let isl_rs_ctx = Context { ptr: ctx.ptr,
611 should_free_on_drop: false };
612 let ctx = ctx.ptr;
613 let isl_rs_result = unsafe { isl_options_set_schedule_carry_self_first(ctx, val) };
614 let isl_rs_result = Stat::from_i32(isl_rs_result);
615 let err = isl_rs_ctx.last_error();
616 if err != Error::None_ {
617 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
618 }
619 Ok(isl_rs_result)
620 }
621
622 pub fn set_schedule_max_coefficient(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
624 let isl_rs_ctx = Context { ptr: ctx.ptr,
625 should_free_on_drop: false };
626 let ctx = ctx.ptr;
627 let isl_rs_result = unsafe { isl_options_set_schedule_max_coefficient(ctx, val) };
628 let isl_rs_result = Stat::from_i32(isl_rs_result);
629 let err = isl_rs_ctx.last_error();
630 if err != Error::None_ {
631 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
632 }
633 Ok(isl_rs_result)
634 }
635
636 pub fn set_schedule_max_constant_term(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
638 let isl_rs_ctx = Context { ptr: ctx.ptr,
639 should_free_on_drop: false };
640 let ctx = ctx.ptr;
641 let isl_rs_result = unsafe { isl_options_set_schedule_max_constant_term(ctx, val) };
642 let isl_rs_result = Stat::from_i32(isl_rs_result);
643 let err = isl_rs_ctx.last_error();
644 if err != Error::None_ {
645 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
646 }
647 Ok(isl_rs_result)
648 }
649
650 pub fn set_schedule_maximize_band_depth(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
652 let isl_rs_ctx = Context { ptr: ctx.ptr,
653 should_free_on_drop: false };
654 let ctx = ctx.ptr;
655 let isl_rs_result = unsafe { isl_options_set_schedule_maximize_band_depth(ctx, val) };
656 let isl_rs_result = Stat::from_i32(isl_rs_result);
657 let err = isl_rs_ctx.last_error();
658 if err != Error::None_ {
659 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
660 }
661 Ok(isl_rs_result)
662 }
663
664 pub fn set_schedule_maximize_coincidence(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
666 let isl_rs_ctx = Context { ptr: ctx.ptr,
667 should_free_on_drop: false };
668 let ctx = ctx.ptr;
669 let isl_rs_result = unsafe { isl_options_set_schedule_maximize_coincidence(ctx, val) };
670 let isl_rs_result = Stat::from_i32(isl_rs_result);
671 let err = isl_rs_ctx.last_error();
672 if err != Error::None_ {
673 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
674 }
675 Ok(isl_rs_result)
676 }
677
678 pub fn set_schedule_outer_coincidence(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
680 let isl_rs_ctx = Context { ptr: ctx.ptr,
681 should_free_on_drop: false };
682 let ctx = ctx.ptr;
683 let isl_rs_result = unsafe { isl_options_set_schedule_outer_coincidence(ctx, val) };
684 let isl_rs_result = Stat::from_i32(isl_rs_result);
685 let err = isl_rs_ctx.last_error();
686 if err != Error::None_ {
687 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
688 }
689 Ok(isl_rs_result)
690 }
691
692 pub fn set_schedule_separate_components(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
694 let isl_rs_ctx = Context { ptr: ctx.ptr,
695 should_free_on_drop: false };
696 let ctx = ctx.ptr;
697 let isl_rs_result = unsafe { isl_options_set_schedule_separate_components(ctx, val) };
698 let isl_rs_result = Stat::from_i32(isl_rs_result);
699 let err = isl_rs_ctx.last_error();
700 if err != Error::None_ {
701 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
702 }
703 Ok(isl_rs_result)
704 }
705
706 pub fn set_schedule_serialize_sccs(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
708 let isl_rs_ctx = Context { ptr: ctx.ptr,
709 should_free_on_drop: false };
710 let ctx = ctx.ptr;
711 let isl_rs_result = unsafe { isl_options_set_schedule_serialize_sccs(ctx, val) };
712 let isl_rs_result = Stat::from_i32(isl_rs_result);
713 let err = isl_rs_ctx.last_error();
714 if err != Error::None_ {
715 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
716 }
717 Ok(isl_rs_result)
718 }
719
720 pub fn set_schedule_split_scaled(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
722 let isl_rs_ctx = Context { ptr: ctx.ptr,
723 should_free_on_drop: false };
724 let ctx = ctx.ptr;
725 let isl_rs_result = unsafe { isl_options_set_schedule_split_scaled(ctx, val) };
726 let isl_rs_result = Stat::from_i32(isl_rs_result);
727 let err = isl_rs_ctx.last_error();
728 if err != Error::None_ {
729 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
730 }
731 Ok(isl_rs_result)
732 }
733
734 pub fn set_schedule_treat_coalescing(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
736 let isl_rs_ctx = Context { ptr: ctx.ptr,
737 should_free_on_drop: false };
738 let ctx = ctx.ptr;
739 let isl_rs_result = unsafe { isl_options_set_schedule_treat_coalescing(ctx, val) };
740 let isl_rs_result = Stat::from_i32(isl_rs_result);
741 let err = isl_rs_ctx.last_error();
742 if err != Error::None_ {
743 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
744 }
745 Ok(isl_rs_result)
746 }
747
748 pub fn set_schedule_whole_component(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
750 let isl_rs_ctx = Context { ptr: ctx.ptr,
751 should_free_on_drop: false };
752 let ctx = ctx.ptr;
753 let isl_rs_result = unsafe { isl_options_set_schedule_whole_component(ctx, val) };
754 let isl_rs_result = Stat::from_i32(isl_rs_result);
755 let err = isl_rs_ctx.last_error();
756 if err != Error::None_ {
757 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
758 }
759 Ok(isl_rs_result)
760 }
761
762 pub fn set_tile_scale_tile_loops(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
764 let isl_rs_ctx = Context { ptr: ctx.ptr,
765 should_free_on_drop: false };
766 let ctx = ctx.ptr;
767 let isl_rs_result = unsafe { isl_options_set_tile_scale_tile_loops(ctx, val) };
768 let isl_rs_result = Stat::from_i32(isl_rs_result);
769 let err = isl_rs_ctx.last_error();
770 if err != Error::None_ {
771 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
772 }
773 Ok(isl_rs_result)
774 }
775
776 pub fn set_tile_shift_point_loops(ctx: &Context, val: i32) -> Result<Stat, LibISLError> {
778 let isl_rs_ctx = Context { ptr: ctx.ptr,
779 should_free_on_drop: false };
780 let ctx = ctx.ptr;
781 let isl_rs_result = unsafe { isl_options_set_tile_shift_point_loops(ctx, val) };
782 let isl_rs_result = Stat::from_i32(isl_rs_result);
783 let err = isl_rs_ctx.last_error();
784 if err != Error::None_ {
785 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
786 }
787 Ok(isl_rs_result)
788 }
789
790 pub fn do_not_free_on_drop(&mut self) {
793 self.should_free_on_drop = false;
794 }
795}
796
797impl Drop for Options {
798 fn drop(&mut self) {
799 if self.should_free_on_drop {
800 unsafe {
801 isl_options_free(self.ptr);
802 }
803 }
804 }
805}