From fca30f0f86f848c105c0dd048815f959e850eb1b Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Fri, 25 Sep 2020 20:05:10 -0700 Subject: 6859 --- apps/tile/table.mu | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 apps/tile/table.mu (limited to 'apps/tile') diff --git a/apps/tile/table.mu b/apps/tile/table.mu new file mode 100644 index 00000000..94f3299a --- /dev/null +++ b/apps/tile/table.mu @@ -0,0 +1,47 @@ +fn initialize-table _self: (address table) { + var self/esi: (addr table) <- copy _self + var data-ah/eax: (addr handle array bind) <- get self, data + populate data-ah, 0x10 +} + +fn bind-int-in-table _self: (addr table), key: (addr array byte), val: int { + var self/esi: (addr table) <- copy _self + var data-ah/esi: (addr handle array bind) <- get self, data + var _data/eax: (addr array bind) <- lookup *data-ah + var data/esi: (addr array bind) <- copy _data + var next-empty-slot-index/eax: (offset bind) <- next-empty-slot data, key + var dest/eax: (addr bind) <- index data, next-empty-slot-index + make-binding dest, key, val +} + +# manual test: full array of binds +fn next-empty-slot _data: (addr array bind), key: (addr array byte) -> result/eax: (offset bind) { + var data/esi: (addr array bind) <- copy _data + var len/ecx: int <- length data + var i/edx: int <- copy 0 + $next-empty-slot:loop: { + result <- compute-offset data, i + compare i, len + break-if->= + { + var target/esi: (addr bind) <- index data, result + var target2/esi: (addr handle array byte) <- get target, key + var target3/eax: (addr array byte) <- lookup *target2 + compare target3, 0 + break-if-= $next-empty-slot:loop + # TODO: how to indicate that key already exists? we don't want to permit rebinding + } + i <- increment + loop + } +} + +fn make-binding _self: (addr bind), key: (addr array byte), _val: int { + var self/esi: (addr bind) <- copy _self + var dest/eax: (addr handle array byte) <- get self, key + populate-text-with dest, key + var dest2/eax: (addr value) <- get self, value + var dest3/eax: (addr int) <- get dest2, scalar-data + var val/ecx: int <- copy _val + copy-to *dest3, val +} -- cgit 1.4.1-2-gfad0 e>
path: root/themes/bios
blob: 570641bd98c6ca63643c11d9f8c34565c59676ca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139