142 lines
5.3 KiB
Rust
142 lines
5.3 KiB
Rust
pub mod util;
|
|
|
|
#[repr(C)]
|
|
#[derive(Clone, Copy)]
|
|
pub struct Reference {
|
|
pub(crate) class:usize,
|
|
pub(crate) address:usize,
|
|
}
|
|
impl Reference {
|
|
pub fn null() -> Self
|
|
{
|
|
Self {
|
|
class:0,
|
|
address:0,
|
|
}
|
|
}
|
|
|
|
pub fn is_null(&self) -> bool
|
|
{
|
|
self.address != 0
|
|
}
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Clone, Copy)]
|
|
pub struct Str {
|
|
pub bytes:*mut u8,
|
|
pub length:usize,
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Clone, Copy)]
|
|
pub struct SparseHeader {
|
|
pub start:usize,
|
|
pub length:usize,
|
|
pub index:usize,
|
|
}
|
|
|
|
extern "C" {
|
|
pub fn test();
|
|
|
|
pub fn acquire(type_id:usize) -> Reference;
|
|
pub fn release(addr:Reference);
|
|
|
|
pub fn copy(dst:Reference, src:Reference) -> bool;
|
|
pub fn transfer(dst:Reference, src:Reference) -> bool;
|
|
|
|
pub fn type_outer(type_id:usize, key:usize) -> usize;
|
|
pub fn type_inner(type_id:usize) -> usize;
|
|
pub fn type_key(type_id:usize) -> usize;
|
|
pub fn type_innerkey(type_id:usize) -> usize;
|
|
pub fn kind_hasinner(kind:usize) -> usize;
|
|
pub fn type_hasinner(type_id:usize) -> usize;
|
|
|
|
pub fn type_size(type_id:usize) -> usize;
|
|
|
|
pub fn name_indexof(data:*const u8, length:usize) -> usize;
|
|
pub fn name_keyof(index:usize) -> Str;
|
|
pub fn name_release(data:Str);
|
|
|
|
pub fn varying_get(addr:Reference) -> Reference;
|
|
pub fn varying_set(addr:Reference, source:Reference);
|
|
pub fn varying_clear(addr:Reference);
|
|
|
|
pub fn bool_set(addr:Reference, data:bool);
|
|
pub fn bool_get(addr:Reference) -> bool;
|
|
|
|
pub fn natural_set(addr:Reference, data:u64);
|
|
pub fn natural_get(addr:Reference) -> u64;
|
|
|
|
pub fn integer_set(addr:Reference, data:i64);
|
|
pub fn integer_get(addr:Reference) -> i64;
|
|
|
|
pub fn significant_set(addr:Reference, data:f64);
|
|
pub fn significant_get(addr:Reference) -> f64;
|
|
|
|
pub fn block_length(addr:Reference) -> usize;
|
|
pub fn block_set(addr:Reference, index:usize, data:u8);
|
|
pub fn block_get(addr:Reference, index:usize) -> u8;
|
|
|
|
pub fn sequence_capacity(addr:Reference) -> usize;
|
|
pub fn sequence_length(addr:Reference) -> usize;
|
|
pub fn sequence_get(addr:Reference, index:usize) -> u8;
|
|
pub fn sequence_clear(addr:Reference);
|
|
pub fn sequence_set(addr:Reference, index:usize, value:u8);
|
|
pub fn sequence_insert(addr:Reference, index:usize, value:u8);
|
|
pub fn sequence_reserve(addr:Reference, capacity:usize);
|
|
|
|
pub fn array_length(addr:Reference) -> usize;
|
|
pub fn array_at(addr:Reference, index:usize) -> Reference;
|
|
pub fn array_update(addr:Reference, index:usize, source:Reference);
|
|
|
|
pub fn list_capacity(addr:Reference) -> usize;
|
|
pub fn list_length(addr:Reference) -> usize;
|
|
//pub fn list_first(addr:Reference) -> Reference;
|
|
//pub fn list_last(addr:Reference) -> Reference;
|
|
pub fn list_at(addr:Reference, index:usize) -> Reference;
|
|
pub fn list_clear(addr:Reference);
|
|
pub fn list_insert(addr:Reference, index:usize, src:Reference);
|
|
pub fn list_prepend(addr:Reference, src:Reference);
|
|
pub fn list_append(addr:Reference, src:Reference);
|
|
pub fn list_update(addr:Reference, index:usize, src:Reference);
|
|
//pub fn list_truncate(addr:Reference, maximum:usize);
|
|
//pub fn list_shift(addr:Reference, maximum:usize);
|
|
pub fn list_remove(addr:Reference, index:usize);
|
|
pub fn list_reserve(addr:Reference, capacity:usize);
|
|
//pub fn list_resize(addr:Reference, length:usize);
|
|
//pub fn list_cut(addr:Reference, index:usize, length:usize) -> Reference;
|
|
//pub fn list_find(addr:Reference, target:Reference, start:usize) -> usize;
|
|
//pub fn list_count(addr:Reference, target:Reference, start:usize) -> usize;
|
|
|
|
pub fn sparse_header_length(addr:Reference) -> usize;
|
|
pub fn sparse_header_data(addr:Reference, index:usize) -> SparseHeader;
|
|
pub fn sparse_length(addr:Reference) -> usize;
|
|
pub fn sparse_clear(addr:Reference);
|
|
pub fn sparse_get(addr:Reference, index:usize) -> Reference;
|
|
pub fn sparse_at(addr:Reference, index:usize) -> Reference;
|
|
pub fn sparse_set(addr:Reference, index:usize, source:Reference);
|
|
pub fn sparse_unset(addr:Reference, index:usize);
|
|
pub fn sparse_indexof(addr:Reference, index:usize) -> usize;
|
|
|
|
pub fn record_length(addr:Reference) -> usize;
|
|
pub fn record_type(addr:Reference, index:usize) -> usize;
|
|
pub fn record_at(addr:Reference, index:usize) -> Reference;
|
|
pub fn record_update(addr:Reference, index:usize, source:Reference);
|
|
pub fn record_keyof(addr:Reference, index:usize) -> usize;
|
|
pub fn record_indexof(addr:Reference, key:usize) -> usize;
|
|
|
|
pub fn schema_length(addr:Reference) -> usize;
|
|
pub fn schema_insert(addr:Reference, index:usize, type_id:usize) -> usize;
|
|
pub fn schema_update(addr:Reference, index:usize, type_id:usize);
|
|
pub fn schema_get(addr:Reference, index:usize) -> usize;
|
|
pub fn schema_remove(addr:Reference, index:usize);
|
|
//pub fn schema_reorder(addr:Reference, from:usize, to:usize);
|
|
pub fn schema_map(addr:Reference, key:usize, index:usize);
|
|
pub fn schema_unmap(addr:Reference, key:usize);
|
|
pub fn schema_indexof(addr:Reference, key:usize) -> usize;
|
|
pub fn schema_keyof(addr:Reference, index:usize) -> usize;
|
|
pub fn schema_bind(addr:Reference, id:usize) -> usize;
|
|
pub fn schema_has(id:usize) -> bool;
|
|
}
|