Source code for srdatalog.ffi.header
[docs]
def generate_extern_c(name):
return (
"""
extern "C" {
using DBHandle = void *;
DBHandle db_new() {
return new SemiNaiveDatabase<"""
+ name
+ """DB>();
}
void db_free(DBHandle h) {
// must be called by program whenever the database is no longer needed to avoid memory leaks
auto ptr = static_cast<SemiNaiveDatabase<"""
+ name
+ """DB> *>(h);
delete ptr;
}
void load(DBHandle h, const char *root_dir) {
auto &db = *static_cast<SemiNaiveDatabase<"""
+ name
+ """DB> *>(h);
"""
+ name
+ """_Runner::load_data(db, std::string(root_dir));
}
void run(DBHandle h, size_t max_iters) {
auto &db = *static_cast<SemiNaiveDatabase<"""
+ name
+ """DB> *>(h);
"""
+ name
+ """_Runner::run(db, max_iters);
}
} // extern "C"
"""
)