1use libc::{c_char, c_int, c_void, size_t, FILE};
2
3pub type MT_HASH_CB = extern "C" fn(u64, u64) -> u64;
4pub type MT_EQUALS_CB = extern "C" fn(u64, u64) -> c_int;
5pub type MT_CREATE_CB = extern "C" fn(*mut u64);
6pub type MT_DESTROY_CB = extern "C" fn(u64);
7pub type MT_TO_STR_CB = extern "C" fn(c_int, u64, *mut c_char, size_t) -> *mut c_char;
8pub type MT_WRITE_BINARY_CB = extern "C" fn(*mut FILE, u64) -> c_int;
9pub type MT_READ_BINARY_CB = extern "C" fn(*mut FILE, *mut u64) -> c_int;
10
11extern "C" {
12
13 pub fn Sylvan_init_mt() -> c_void;
14 pub fn Sylvan_mt_create_type() -> u32;
15 pub fn Sylvan_mt_set_hash(terminal_type: u32, hash_cb: MT_HASH_CB) -> c_void;
16 pub fn Sylvan_mt_set_equals(terminal_type: u32, equals_cb: MT_EQUALS_CB) -> c_void;
17 pub fn Sylvan_mt_set_create(terminal_type: u32, create_cb: MT_CREATE_CB) -> c_void;
18 pub fn Sylvan_mt_set_destroy(terminal_type: u32, destroy_cb: MT_DESTROY_CB) -> c_void;
19 pub fn Sylvan_mt_set_to_str(terminal_type: u32, to_str_cb: MT_TO_STR_CB) -> c_void;
20 pub fn Sylvan_mt_set_write_binary(
21 terminal_type: u32,
22 write_binary_cb: MT_WRITE_BINARY_CB,
23 ) -> c_void;
24 pub fn Sylvan_mt_set_read_binary(
25 terminal_type: u32,
26 read_binary_cb: MT_READ_BINARY_CB,
27 ) -> c_void;
28 pub fn Sylvan_mt_has_custom_hash(terminal_type: u32) -> c_int;
29 pub fn Sylvan_mt_hash(terminal_type: u32, value: u64, seed: u64) -> u64;
30 pub fn Sylvan_mt_to_str(
31 complement: c_int,
32 terminal_type: u32,
33 value: u64,
34 buf: *mut c_char,
35 buflen: size_t,
36 ) -> *mut c_char;
37 pub fn Sylvan_mt_write_binary(terminal_type: u32, value: u64, out: *mut FILE) -> c_int;
38 pub fn Sylvan_mt_read_binary(terminal_type: u32, value: *mut u64, input: *mut FILE) -> c_int;
39
40}