Skip to main content

kunquant_rs/
ffi.rs

1use libc::size_t;
2use std::os::raw::{c_char, c_int, c_void};
3
4// Opaque handle types from KunQuant C API
5pub type KunExecutorHandle = *mut c_void;
6pub type KunLibraryHandle = *mut c_void;
7pub type KunModuleHandle = *mut c_void;
8pub type KunBufferNameMapHandle = *mut c_void;
9pub type KunStreamContextHandle = *mut c_void;
10
11#[link(name = "KunRuntime")]
12unsafe extern "C" {
13    // Executor management
14    pub fn kunCreateSingleThreadExecutor() -> KunExecutorHandle;
15    pub fn kunCreateMultiThreadExecutor(numthreads: c_int) -> KunExecutorHandle;
16    pub fn kunDestoryExecutor(ptr: KunExecutorHandle);
17
18    // Library management
19    pub fn kunLoadLibrary(path_or_name: *const c_char) -> KunLibraryHandle;
20    pub fn kunGetModuleFromLibrary(lib: KunLibraryHandle, name: *const c_char) -> KunModuleHandle;
21    pub fn kunUnloadLibrary(ptr: KunLibraryHandle);
22
23    // Buffer name map management
24    pub fn kunCreateBufferNameMap() -> KunBufferNameMapHandle;
25    pub fn kunDestoryBufferNameMap(ptr: KunBufferNameMapHandle);
26    pub fn kunSetBufferNameMap(ptr: KunBufferNameMapHandle, name: *const c_char, buffer: *mut f32);
27    pub fn kunEraseBufferNameMap(ptr: KunBufferNameMapHandle, name: *const c_char);
28
29    // Batch computation
30    pub fn kunRunGraph(
31        exec: KunExecutorHandle,
32        m: KunModuleHandle,
33        buffers: KunBufferNameMapHandle,
34        num_stocks: size_t,
35        total_time: size_t,
36        cur_time: size_t,
37        length: size_t,
38    );
39
40    // Stream computation
41    pub fn kunCreateStream(
42        exec: KunExecutorHandle,
43        m: KunModuleHandle,
44        num_stocks: size_t,
45    ) -> KunStreamContextHandle;
46
47    pub fn kunQueryBufferHandle(context: KunStreamContextHandle, name: *const c_char) -> size_t;
48
49    pub fn kunStreamGetCurrentBuffer(context: KunStreamContextHandle, handle: size_t)
50    -> *const f32;
51
52    pub fn kunStreamPushData(context: KunStreamContextHandle, handle: size_t, buffer: *const f32);
53
54    pub fn kunStreamRun(context: KunStreamContextHandle);
55    pub fn kunDestoryStream(context: KunStreamContextHandle);
56}