mirror of
https://github.com/fluencelabs/fluid
synced 2025-04-25 06:42:18 +00:00
mod ffi
This commit is contained in:
parent
cfc6bdfa3a
commit
7abad070c7
@ -12,25 +12,25 @@ fn azaza(arg: String) -> String {
|
|||||||
let query = "CREATE VIRTUAL TABLE users USING FTS5(body)";
|
let query = "CREATE VIRTUAL TABLE users USING FTS5(body)";
|
||||||
unsafe {
|
unsafe {
|
||||||
let bytes = query.as_bytes();
|
let bytes = query.as_bytes();
|
||||||
let query_ptr = allocate(bytes.len());
|
let query_ptr = ffi::allocate(bytes.len());
|
||||||
for (i, byte) in bytes.iter().enumerate() {
|
for (i, byte) in bytes.iter().enumerate() {
|
||||||
let ptr = query_ptr as usize + 8*i;
|
let ptr = query_ptr as usize + 8*i;
|
||||||
store(ptr, *byte);
|
ffi::store(ptr, *byte);
|
||||||
}
|
}
|
||||||
|
|
||||||
let result_ptr = invoke(query_ptr, bytes.len());
|
let result_ptr = ffi::invoke(query_ptr, bytes.len());
|
||||||
|
|
||||||
let mut result_size = 0;
|
let mut result_size = 0;
|
||||||
for i in 0u8..4u8 {
|
for i in 0u8..4u8 {
|
||||||
let ptr = result_ptr as usize + 8*i as usize;
|
let ptr = result_ptr as usize + 8*i as usize;
|
||||||
let b = load(ptr);
|
let b = ffi::load(ptr);
|
||||||
result_size = result_size | (b >> 8*i)
|
result_size = result_size | (b >> 8*i)
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut result_bytes = vec![0; result_size as usize];
|
let mut result_bytes = vec![0; result_size as usize];
|
||||||
for i in 0u8..result_size {
|
for i in 0u8..result_size {
|
||||||
let ptr = result_ptr as usize + 8*i as usize;
|
let ptr = result_ptr as usize + 8*i as usize;
|
||||||
let b = load(ptr);
|
let b = ffi::load(ptr);
|
||||||
result_bytes[i as usize] = b;
|
result_bytes[i as usize] = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,11 +45,13 @@ fn azaza(arg: String) -> String {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[link(wasm_import_module = "sqlite")]
|
pub mod ffi {
|
||||||
extern "C" {
|
#[link(wasm_import_module = "sqlite")]
|
||||||
fn allocate(size: usize) -> i32;
|
extern "C" {
|
||||||
fn deallocate(ptr: i32, size: usize);
|
pub fn allocate(size: usize) -> i32;
|
||||||
fn invoke(ptr: i32, size: usize) -> i32;
|
pub fn deallocate(ptr: i32, size: usize);
|
||||||
fn store(ptr: usize, byte: u8);
|
pub fn invoke(ptr: i32, size: usize) -> i32;
|
||||||
fn load(ptr: usize) -> u8;
|
pub fn store(ptr: usize, byte: u8);
|
||||||
|
pub fn load(ptr: usize) -> u8;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user