annotate code/tree.lm @ 40:d5ccb66ae98b

Move some basic library code out of dotScanner.lm into separate files now that import:from works
author Michael Pavone <pavone@retrodev.com>
date Sat, 26 Jul 2014 15:29:01 -0700
parents
children e1047192610c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
40
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #{
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 makeTree:size <- :lst :size {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 ret <- 0
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 sub <- 0
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 half <- size / 2
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 if: size = 2 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 ret <- #[(lst value) ((lst tail) value)]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 if: size = 1 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 ret <- lst
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 sub <- split: lst at: half
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 ret <- #[
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 (makeTree: (sub value) size: half)
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 (makeTree: (sub tail) size: size-half)
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 ]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 ret
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 makeTree <- :lst {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 size <- lst length
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 #[size (makeTree: lst size: size)]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 get:fromTree:size <- :idx :tree :size {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 ret <- 0
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 half <- size / 2
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 if: size <= 2 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 if: idx = 0 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 ret <- tree value
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 ret <- tree tail
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 if: idx < half {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 ret <- get: idx fromTree: (tree value) size: half
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 ret <- get: idx-half fromTree: (tree tail) size: size-half
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 ret
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 get:fromTree <- :idx :tree {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47 size <- tree value
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 get: idx fromTree: (tree tail) size: size
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 treeMap:size <- :tree fun :size {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 ret <- 0
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 half <- size / 2
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 if: size = 2 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 ret <- #[(fun: (tree value)) (fun: (tree tail))]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 if: size = 1 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 ret <- #[(fun: (tree value)) 0]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 ret <- #[
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 (treeMap: (tree value) fun size: half)
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 (treeMap: (tree tail) fun size: size-half)
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 ]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 ret
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
67 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 treeMap <- :tree fun {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 #[(tree value) (treeMap: (tree tail) fun size: (tree value))]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
71 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 tree:size:update:with <- :tree :size :idx :fun {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 ret <- 0
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 half <- size / 2
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 if: size = 2 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 if: idx = 0 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78 ret <- #[(fun: (tree value)) (tree tail)]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
79 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80 ret <- #[(tree value) (fun: (tree tail))]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
81 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83 if: size = 1 {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
84 ret <- #[(fun: (tree value)) 0]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
85 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
86 if: (idx < half) {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
87 ret <- #[
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
88 (tree: (tree value) size: half update: idx with: fun)
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
89 (tree tail)
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
90 ]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
91 } else: {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
92 ret <- #[
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93 (tree value)
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
94 (tree: (tree tail) size: size-half update: idx-half with: fun)
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
95 ]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
96 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
97 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
98 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
99 ret
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
100 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
101
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
102 tree:update:with <- :tree :idx :fun {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
103 #[(tree value) (tree: (tree tail) size: (tree value) update: idx with: fun)]
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
104 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
105
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
106 tree:set:to <- :tree :idx :val {
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
107 tree: tree update: idx with: :el { val }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
108 }
d5ccb66ae98b Move some basic library code out of dotScanner.lm into separate files now that import:from works
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
109 }