code wiki / (root) / nx_lib_reindex.nx

nx_lib_reindex.nx source

↩ module page · 31 lines · 1430 B

1// nx_lib_reindex.nx -- isolate the full-text index build over the durable 16K 2// catalog (data already stored). Reports where it stops. 3import "nx_syscalls.nx" 4import "nx_lib_index.nx" 5const K_MAGIC_1048576: i64 = 1048576 6 7func rx_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 8func rx_putn(v: i64) -> i64 { 9 let bb: *u8 = sys_mmap(28); var m: i64 = v 10 let t: *u8 = sys_mmap(28); var k: i64 = 0 11 if m == 0 { t[0] = 48 as u8; k = 1 } 12 while m > 0 { t[k] = (48 + (m - (m/10)*10)) as u8; m = m / 10; k = k + 1 } 13 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, bb, k); return 0 14} 15func rx_hits(out: *u8, n: i64) -> i64 { 16 if n <= 2 { rx_puts("0"); return 0 } 17 var c: i64 = 1; var i: i64 = 0 18 while i < n { if out[i] == 44 as u8 { c = c + 1 } i = i + 1 } 19 rx_putn(c); return 0 20} 21 22func main() -> i64 { 23 rx_puts("building full-text index over durable catalog...\n") 24 let nd: i64 = nx_lib_index_build() 25 rx_puts("index built OK, docs="); rx_putn(nd); rx_puts("\n") 26 let out: *u8 = sys_mmap(K_MAGIC_1048576) 27 rx_puts("q=Archaea -> "); let a: i64 = nx_lib_index_search("Archaea" as *u8, 7, out); rx_hits(out, a); rx_puts(" hits\n") 28 rx_puts("q=Acidilobaceae -> "); let b: i64 = nx_lib_index_search("Acidilobaceae" as *u8, 13, out); rx_hits(out, b); rx_puts(" hits\n") 29 rx_puts("done\n") 30 return 0 31}