1
pub mod bindings {
2
    #![allow(warnings)]
3
    include!(concat!(env!("OUT_DIR"), "/chuffed_bindings.rs"));
4
}
5

            
6
pub mod wrappers {
7
    use crate::bindings::{
8
        all_different, branch_IntVar, createVar, createVars, int_plus, make_vec_intvar,
9
        output_vars1, var_sym_break, vec, ConLevel, IntVar, ValBranch, VarBranch,
10
    };
11
    use core::ptr;
12

            
13
    // The signature of createVar is below for reference.
14
    // createVar(x: *mut *mut IntVar, min: ::std::os::raw::c_int, max: ::std::os::raw::c_int, el: bool)
15
    pub fn create_var(min: i32, max: i32, el: bool) -> *mut IntVar {
16
        let mut ptr: *mut IntVar = ptr::null_mut();
17

            
18
        unsafe {
19
            createVar(&mut ptr, min, max, el);
20
            ptr
21
        }
22
    }
23

            
24
    // createVars void createVars(vec<IntVar*>& x, int n, int min, int max, bool el)
25
    pub fn create_vars(n: i32, min: i32, max: i32, el: bool) -> *mut vec<*mut IntVar> {
26
        let ptr: *mut vec<*mut IntVar> = unsafe { make_vec_intvar() };
27

            
28
        unsafe {
29
            createVars(ptr, n, min, max, el);
30
            ptr
31
        }
32
    }
33

            
34
    // void all_different(vec<IntVar*>& x, ConLevel cl)
35
    pub unsafe fn all_different_wrapper(x: *mut vec<*mut IntVar>, cl: ConLevel) {
36
        unsafe {
37
            all_different(x, cl);
38
        }
39
    }
40

            
41
    // void branch(vec<Branching*> x, VarBranch var_branch, ValBranch val_branch);
42
    pub unsafe fn branch_wrapper(
43
        x: *mut vec<*mut IntVar>,
44
        var_branch: VarBranch,
45
        val_branch: ValBranch,
46
    ) {
47
        unsafe {
48
            branch_IntVar(x, var_branch, val_branch);
49
        }
50
    }
51

            
52
    pub unsafe fn output_vars_wrapper(x: *mut vec<*mut IntVar>) {
53
        unsafe {
54
            // output_vars1 takes in an vec<IntVar*> instead of branching
55
            output_vars1(x);
56
        }
57
    }
58

            
59
    pub unsafe fn var_sym_break_wrapper(x: *mut vec<*mut IntVar>) {
60
        unsafe {
61
            var_sym_break(x);
62
        }
63
    }
64

            
65
    pub unsafe fn int_plus_wrapper(x: *mut IntVar, y: *mut IntVar, z: *mut IntVar) {
66
        unsafe {
67
            int_plus(x, y, z);
68
        }
69
    }
70
}