-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add wrappers for basic chuffed functions in lib.rs. Recreate example/…
…template.cpp in main.rs using wrapper functions. Update wrapper.h with ffi hacks and add wrapper.cpp. Update build.rs, build.sh and clean.sh accordingly
- Loading branch information
1 parent
515d869
commit d5f60a0
Showing
8 changed files
with
143 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,3 +2,5 @@ | |
|
||
cargo clean | ||
rm -rf vendor/build | ||
rm libwrapper.a | ||
rm wrapper.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
-I./vendor | ||
-xc++ | ||
--std=c++11 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,44 @@ | ||
use chuffed_rs::bindings::createVar; | ||
use chuffed_rs::bindings::IntVar; | ||
pub fn main() { | ||
let mut var = std::mem::MaybeUninit::<IntVar>::uninit(); | ||
unsafe { | ||
createVar(&mut var.as_mut_ptr(), 0, 5, false); | ||
use chuffed_rs::wrappers::{create_vars, all_different_wrapper, branch_wrapper}; | ||
use chuffed_rs::bindings::{IntVar, ConLevel_CL_DEF, VarBranch_VAR_INORDER, VarBranch_VAR_MIN_MIN, vec, new_dummy_problem, get_idx, p_addVars, p_setcallback}; | ||
|
||
unsafe fn post_constraints(_n: i32) -> *mut vec<*mut IntVar> { | ||
// Create constant | ||
let n: i32 = _n; | ||
// Create some variables | ||
let x: *mut vec<*mut IntVar> = create_vars(n, 0, n, false); | ||
|
||
// Post some constraints | ||
all_different_wrapper(x, ConLevel_CL_DEF); | ||
|
||
// Post some branchings | ||
branch_wrapper(x as _, VarBranch_VAR_INORDER, VarBranch_VAR_MIN_MIN); | ||
|
||
x | ||
} | ||
|
||
// Custom printing function for this problem | ||
#[no_mangle] | ||
pub unsafe extern "C" fn callback(x: *mut vec<*mut IntVar>) { | ||
print!("First output is: {:?}", get_idx(x, 0)); | ||
} | ||
|
||
fn main() { | ||
let args: Vec<String> = std::env::args().collect(); | ||
|
||
if args.len() != 2 { | ||
println!("Invalid number of arguments"); | ||
return; | ||
} | ||
|
||
let n: i32 = args[1].parse().expect("Invalid input"); | ||
|
||
unsafe{ | ||
let x = post_constraints(n); | ||
// make new dummy problem | ||
let p = new_dummy_problem(); | ||
// Call problem.addvars() | ||
p_addVars(p, x); | ||
// Call problem.setcallback() | ||
p_setcallback(p, Some(callback)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
#include "./wrapper.h" | ||
|
||
DummyProblem *new_dummy_problem() { return new DummyProblem(); } | ||
void p_addVars(DummyProblem *p, vec<IntVar *> *_searchVars) { | ||
p->addVars(_searchVars); | ||
} | ||
void p_setcallback(DummyProblem *p, void (*_callback)(vec<IntVar *> *)) { | ||
p->setcallback(_callback); | ||
} | ||
IntVar get_idx(vec<IntVar *> *x, int i) { return **x[i]; } | ||
|
||
void branch_IntVar(vec<IntVar *> *x, VarBranch var_branch, | ||
ValBranch val_branch) { | ||
branch(*x, var_branch, val_branch); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,23 @@ | ||
#include "chuffed/branching/branching.h" | ||
#include "chuffed/core/engine.h" | ||
#include "chuffed/core/propagator.h" | ||
#include "chuffed/vars/modelling.h" | ||
|
||
class DummyProblem { | ||
public: | ||
vec<IntVar *> *searchVars; | ||
// callback | ||
void (*callback)(vec<IntVar *> *); | ||
|
||
void print() { callback(searchVars); } | ||
void setcallback(void (*_callback)(vec<IntVar *> *)) { callback = _callback; } | ||
void addVars(vec<IntVar *> *_searchVars) { searchVars = _searchVars; } | ||
}; | ||
|
||
DummyProblem *new_dummy_problem(); | ||
void p_addVars(DummyProblem *p, vec<IntVar *> *_searchVars); | ||
void p_setcallback(DummyProblem *p, void (*_callback)(vec<IntVar *> *)); | ||
IntVar get_idx(vec<IntVar *> *x, int i); | ||
|
||
void branch_IntVar(vec<IntVar *> *x, VarBranch var_branch, | ||
ValBranch val_branch); |