#![allow(unsafe_code)]
use crate::engine::RKeyFunction;
use crate::panic_guard::FfiBoundary;
use crate::runtime::{EngineContext, FfiPtr};
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__index_init(
ctx: *mut EngineContext,
idx: u32,
sorted: bool,
) -> i32 {
FfiBoundary::run(|| {
unsafe { &mut *ctx }.engine_mut().index_init(idx, sorted)
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__index_end(ctx: *mut EngineContext) -> i32 {
FfiBoundary::run(|| {
unsafe { &mut *ctx }.engine_mut().index_end()
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__index_read_map(
ctx: *mut EngineContext,
buf: *mut u8,
buf_len: usize,
key: *const u8,
key_len: usize,
find_flag: i32,
) -> i32 {
FfiBoundary::run(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
let buf = unsafe { FfiPtr::slice_mut(buf, buf_len) };
let key = if key.is_null() {
&[][..]
} else {
unsafe { FfiPtr::slice_const(key, key_len) }
};
engine.index_read_map(buf, key, RKeyFunction::from_raw(find_flag))
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__index_next(
ctx: *mut EngineContext,
buf: *mut u8,
buf_len: usize,
) -> i32 {
FfiBoundary::run(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
engine.index_next(unsafe { FfiPtr::slice_mut(buf, buf_len) })
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__index_prev(
ctx: *mut EngineContext,
buf: *mut u8,
buf_len: usize,
) -> i32 {
FfiBoundary::run(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
engine.index_prev(unsafe { FfiPtr::slice_mut(buf, buf_len) })
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__index_first(
ctx: *mut EngineContext,
buf: *mut u8,
buf_len: usize,
) -> i32 {
FfiBoundary::run(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
engine.index_first(unsafe { FfiPtr::slice_mut(buf, buf_len) })
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__index_last(
ctx: *mut EngineContext,
buf: *mut u8,
buf_len: usize,
) -> i32 {
FfiBoundary::run(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
engine.index_last(unsafe { FfiPtr::slice_mut(buf, buf_len) })
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__index_next_same(
ctx: *mut EngineContext,
buf: *mut u8,
buf_len: usize,
key: *const u8,
key_len: usize,
) -> i32 {
FfiBoundary::run(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
let buf = unsafe { FfiPtr::slice_mut(buf, buf_len) };
let key = unsafe { FfiPtr::slice_const(key, key_len) };
engine.index_next_same(buf, key)
})
}