code wiki / _hdl_build / nx_viz_tree.nx

nx_viz_tree.nx source

↩ module page · 43 lines · 1526 B

1// nx_viz_tree.nx -- the TIDY-TREE layer of the sovereign Nishi viz library (the d3-hierarchy tree core, bits-up). 2// Assigns x by leaf order (spacing 100) then centres each internal node over its children (post-order by 3// decreasing depth); y = depth. Cleaner than naive layered stacking (parents sit above their subtree's middle). 4// Closes layout-tree. license_tier: ORIGINAL 5import "nx_syscalls.nx" 6 7func vt_tree(n: i64, parent: *i64, x_out: *i64, depth_out: *i64) -> i64 { 8 var i: i64 = 0 9 while i < n { 10 var dep: i64 = 0; var p: i64 = parent[i] 11 while p >= 0 { dep = dep + 1; p = parent[p] } 12 depth_out[i] = dep 13 i = i + 1 14 } 15 var maxd: i64 = 0 16 i = 0 17 while i < n { if depth_out[i] > maxd { maxd = depth_out[i] } i = i + 1 } 18 19 var counter: i64 = 0 20 i = 0 21 while i < n { 22 var haschild: i64 = 0; var c: i64 = 0 23 while c < n { if parent[c] == i { haschild = 1; c = n } else { c = c + 1 } } 24 if haschild == 0 { x_out[i] = counter * 100; counter = counter + 1 } 25 i = i + 1 26 } 27 28 var dd: i64 = maxd - 1 29 while dd >= 0 { 30 i = 0 31 while i < n { 32 if depth_out[i] == dd { 33 var sum: i64 = 0; var cnt: i64 = 0; var c: i64 = 0 34 while c < n { if parent[c] == i { sum = sum + x_out[c]; cnt = cnt + 1 } c = c + 1 } 35 if cnt > 0 { x_out[i] = sum / cnt } 36 } 37 i = i + 1 38 } 39 dd = dd - 1 40 } 41 return maxd 42} 43func main() -> i64 { return 0 }