Surface §5 geometry operators to compiled El
Register the six engram_geo_*_json operators in the compiler builtin_arity table (bare heavy-runtime names + __ seed names, mirroring engram_activate_json) and add the engram.el module wrappers, so a compiled El (CGI) program can call them by name. The heavy-runtime C functions already existed (el_runtime.c:12287+, declared el_runtime.h:627-632); this completes the EL call surface. The shipped elc already emits a direct C call for these builtins (unknown ident-calls pass through), so no self-host compiler fold — the memory-heavy, drift-prone step — was required. Demonstrated end-to-end: a compiled geo_ops_demo.el booted a copy of the store (13,036 nodes) and produced real subtract/distance JSON on two real neighborhoods; test_geo_ops.c stays 20/20, ASan/UBSan clean. Also brace the centroid_unit normalization if/else in engram_geometry.c to clear the misleading-indentation warning (behavior-neutral).
This commit is contained in:
@@ -119,6 +119,37 @@ fn engram_activate_json(query: String, limit: Int) -> String {
|
||||
return __engram_activate_json(query, limit)
|
||||
}
|
||||
|
||||
// --- Geometry operators (§5) ---
|
||||
// Relational-neighborhood algebra over centered engram descriptors. Each takes
|
||||
// comma-separated seed-id set(s); a centered neighborhood is grown from those
|
||||
// seeds (ad-hoc NOCACHE path) and the operator's JSON result is returned.
|
||||
// Delegates to the native __engram_geo_*_json seeds (el_seed.c); in the heavy
|
||||
// engram runtime the same bare names resolve directly to el_runtime.c symbols.
|
||||
|
||||
fn engram_geo_descriptor_json(seeds: String) -> String {
|
||||
return __engram_geo_descriptor_json(seeds)
|
||||
}
|
||||
|
||||
fn engram_geo_overlap_json(a_seeds: String, b_seeds: String) -> String {
|
||||
return __engram_geo_overlap_json(a_seeds, b_seeds)
|
||||
}
|
||||
|
||||
fn engram_geo_subtract_json(a_seeds: String, b_seeds: String, mode: String) -> String {
|
||||
return __engram_geo_subtract_json(a_seeds, b_seeds, mode)
|
||||
}
|
||||
|
||||
fn engram_geo_combine_json(a_seeds: String, b_seeds: String) -> String {
|
||||
return __engram_geo_combine_json(a_seeds, b_seeds)
|
||||
}
|
||||
|
||||
fn engram_geo_distance_json(a_seeds: String, b_seeds: String) -> String {
|
||||
return __engram_geo_distance_json(a_seeds, b_seeds)
|
||||
}
|
||||
|
||||
fn engram_geo_analogy_json(a_seeds: String, b_seeds: String) -> String {
|
||||
return __engram_geo_analogy_json(a_seeds, b_seeds)
|
||||
}
|
||||
|
||||
// --- Generation ---
|
||||
|
||||
fn generate(form: String) -> String {
|
||||
|
||||
Reference in New Issue
Block a user