55 lines
1.9 KiB
C
55 lines
1.9 KiB
C
#ifndef ARBORICX_H
|
|
#define ARBORICX_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct arb_ctx arb_ctx_t;
|
|
|
|
/* Context lifecycle */
|
|
arb_ctx_t* arboricx_init(void);
|
|
void arboricx_free(arb_ctx_t* ctx);
|
|
void arboricx_free_buf(arb_ctx_t* ctx, uint8_t* ptr, size_t len);
|
|
|
|
/* Tree construction */
|
|
uint32_t arb_leaf(arb_ctx_t* ctx);
|
|
uint32_t arb_stem(arb_ctx_t* ctx, uint32_t child);
|
|
uint32_t arb_fork(arb_ctx_t* ctx, uint32_t left, uint32_t right);
|
|
uint32_t arb_app(arb_ctx_t* ctx, uint32_t func, uint32_t arg);
|
|
|
|
/* Reduction */
|
|
uint32_t arb_reduce(arb_ctx_t* ctx, uint32_t root, uint64_t fuel);
|
|
|
|
/* Codec constructors */
|
|
uint32_t arb_of_number(arb_ctx_t* ctx, uint64_t n);
|
|
uint32_t arb_of_string(arb_ctx_t* ctx, const char* s);
|
|
uint32_t arb_of_bytes(arb_ctx_t* ctx, const uint8_t* bytes, size_t len);
|
|
uint32_t arb_of_list(arb_ctx_t* ctx, const uint32_t* items, size_t len);
|
|
|
|
/* Codec destructors (return 1 on success, 0 on failure) */
|
|
int arb_to_number(arb_ctx_t* ctx, uint32_t root, uint64_t* out);
|
|
int arb_to_string(arb_ctx_t* ctx, uint32_t root, uint8_t** out_ptr, size_t* out_len);
|
|
int arb_to_bytes(arb_ctx_t* ctx, uint32_t root, uint8_t** out_ptr, size_t* out_len);
|
|
int arb_to_bool(arb_ctx_t* ctx, uint32_t root, int* out);
|
|
|
|
/* Result unwrapping (return 1 on success, 0 on failure) */
|
|
int arb_unwrap_result(arb_ctx_t* ctx, uint32_t root, int* out_ok, uint32_t* out_value, uint32_t* out_rest);
|
|
int arb_unwrap_host_value(arb_ctx_t* ctx, uint32_t root, uint64_t* out_tag, uint32_t* out_payload);
|
|
|
|
/* Kernel entrypoints */
|
|
uint32_t arb_kernel_root(arb_ctx_t* ctx);
|
|
|
|
/* Native bundle loading (fast path — bypasses the Tricu kernel) */
|
|
uint32_t arb_load_bundle(arb_ctx_t* ctx, const uint8_t* bytes, size_t len, const char* name);
|
|
uint32_t arb_load_bundle_default(arb_ctx_t* ctx, const uint8_t* bytes, size_t len);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ARBORICX_H */
|