#ifndef ARBORICX_H #define ARBORICX_H #include #include #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 */