@salang/sa 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/bin/sa.js +13 -1
  2. package/package.json +8 -7
  3. package/sa_std/alloc/layout.sal +12 -0
  4. package/sa_std/alloc/prelude.sa +1 -0
  5. package/sa_std/alloc/prelude.sal +1 -0
  6. package/sa_std/alloc/string.sa +3 -0
  7. package/sa_std/alloc/vec.sa +684 -0
  8. package/sa_std/alloc/vec.sal +4 -0
  9. package/sa_std/any.sa +130 -0
  10. package/sa_std/any.sal +23 -0
  11. package/sa_std/array.sa +1876 -0
  12. package/sa_std/ascii.sa +2 -0
  13. package/sa_std/ascii.sal +1 -0
  14. package/sa_std/async.sla +116 -0
  15. package/sa_std/binary_heap.sa +3003 -0
  16. package/sa_std/binary_heap.sal +7 -0
  17. package/sa_std/borrow.sa +171 -0
  18. package/sa_std/borrow.sal +13 -0
  19. package/sa_std/btree_map.sa +2210 -0
  20. package/sa_std/btree_map.sal +11 -0
  21. package/sa_std/btree_set.sa +1072 -0
  22. package/sa_std/btree_set.sal +6 -0
  23. package/sa_std/char.sa +1309 -0
  24. package/sa_std/char.sal +50 -0
  25. package/sa_std/cmp.sa +554 -0
  26. package/sa_std/cmp.sal +14 -0
  27. package/sa_std/collections/binary_heap.sa +1 -0
  28. package/sa_std/collections/btree_map.sa +1 -0
  29. package/sa_std/collections/btree_set.sa +1 -0
  30. package/sa_std/collections/hashmap.sa +1 -0
  31. package/sa_std/collections/hashset.sa +1 -0
  32. package/sa_std/collections/linked_list.sa +1120 -0
  33. package/sa_std/collections/linked_list.sal +10 -0
  34. package/sa_std/collections/prelude.sa +7 -0
  35. package/sa_std/collections/prelude.sal +1 -0
  36. package/sa_std/collections/vec_deque.sa +1 -0
  37. package/sa_std/collections.sal +13 -0
  38. package/sa_std/convert.sa +1115 -0
  39. package/sa_std/convert.sal +24 -0
  40. package/sa_std/core/arc.sa +233 -0
  41. package/sa_std/core/arc.sal +4 -0
  42. package/sa_std/core/ascii.sa +784 -0
  43. package/sa_std/core/ascii.sal +34 -0
  44. package/sa_std/core/bit.sa +41 -0
  45. package/sa_std/core/box.sa +1 -0
  46. package/sa_std/core/box.sal +2 -0
  47. package/sa_std/core/cell.sa +108 -0
  48. package/sa_std/core/cell.sal +5 -0
  49. package/sa_std/core/cleanup.sa +26 -0
  50. package/sa_std/core/control.sa +20 -0
  51. package/sa_std/core/derive.sa +60 -0
  52. package/sa_std/core/derive.sal +1 -0
  53. package/sa_std/core/dispatch.sa +7 -0
  54. package/sa_std/core/dispatch.sal +5 -0
  55. package/sa_std/core/future.sa +777 -0
  56. package/sa_std/core/future.sal +73 -0
  57. package/sa_std/core/hash.sa +48 -0
  58. package/sa_std/core/iter.sa +2805 -0
  59. package/sa_std/core/iter.sal +4 -0
  60. package/sa_std/core/loop.sa +60 -0
  61. package/sa_std/core/mem.sa +220 -0
  62. package/sa_std/core/option.sa +825 -0
  63. package/sa_std/core/option.sal +11 -0
  64. package/sa_std/core/panic.sa +23 -0
  65. package/sa_std/core/panic.sal +12 -0
  66. package/sa_std/core/prelude.sa +18 -0
  67. package/sa_std/core/prelude.sal +18 -0
  68. package/sa_std/core/rc.sa +225 -0
  69. package/sa_std/core/rc.sal +4 -0
  70. package/sa_std/core/refcell.sa +283 -0
  71. package/sa_std/core/refcell.sal +13 -0
  72. package/sa_std/core/result.sa +708 -0
  73. package/sa_std/core/result.sal +6 -0
  74. package/sa_std/core/rust_patterns.sal +295 -0
  75. package/sa_std/core/sa_core.sa +84 -0
  76. package/sa_std/core/slice.sa +4021 -0
  77. package/sa_std/core/slice.sal +7 -0
  78. package/sa_std/core/task.sa +112 -0
  79. package/sa_std/core/task.sal +15 -0
  80. package/sa_std/core/trait_object.sa +26 -0
  81. package/sa_std/core/trait_object.sal +4 -0
  82. package/sa_std/core/waker.sa +289 -0
  83. package/sa_std/core/waker.sal +31 -0
  84. package/sa_std/core/weak.sa +2 -0
  85. package/sa_std/core/weak.sal +4 -0
  86. package/sa_std/cow.sa +3 -0
  87. package/sa_std/cow.sal +2 -0
  88. package/sa_std/cstring.sa +3 -0
  89. package/sa_std/cstring.sal +2 -0
  90. package/sa_std/default.sa +99 -0
  91. package/sa_std/duration.sa +3 -0
  92. package/sa_std/duration.sal +2 -0
  93. package/sa_std/encoding/json.sa +259 -0
  94. package/sa_std/encoding/json.sai +54 -0
  95. package/sa_std/encoding/json.sal +35 -0
  96. package/sa_std/encoding/prelude.sa +1 -0
  97. package/sa_std/encoding/prelude.sal +0 -0
  98. package/sa_std/env.sa +390 -0
  99. package/sa_std/env.sai +25 -0
  100. package/sa_std/error.sa +253 -0
  101. package/sa_std/error.sal +44 -0
  102. package/sa_std/ffi/cstring.sa +3 -0
  103. package/sa_std/ffi/cstring.sal +1 -0
  104. package/sa_std/ffi/prelude.sa +2 -0
  105. package/sa_std/ffi/prelude.sal +2 -0
  106. package/sa_std/ffi.sa +635 -0
  107. package/sa_std/ffi.sal +51 -0
  108. package/sa_std/fmt.sa +2 -0
  109. package/sa_std/fmt.sai +18 -0
  110. package/sa_std/fmt.sal +35 -0
  111. package/sa_std/fs.sa +1023 -0
  112. package/sa_std/fs.sai +127 -0
  113. package/sa_std/fs.sal +51 -0
  114. package/sa_std/future.sa +2 -0
  115. package/sa_std/future.sal +1 -0
  116. package/sa_std/hash.sa +1486 -0
  117. package/sa_std/hash.sal +13 -0
  118. package/sa_std/hashmap.sa +1962 -0
  119. package/sa_std/hashmap.sal +20 -0
  120. package/sa_std/hashset.sa +1004 -0
  121. package/sa_std/hashset.sal +18 -0
  122. package/sa_std/http2.sa +78 -0
  123. package/sa_std/http2.sai +26 -0
  124. package/sa_std/http2.sal +36 -0
  125. package/sa_std/instant.sa +3 -0
  126. package/sa_std/instant.sal +2 -0
  127. package/sa_std/io/buf_reader.sa +43 -0
  128. package/sa_std/io/buf_writer.sa +35 -0
  129. package/sa_std/io/bufio.sa +4 -0
  130. package/sa_std/io/bufio.sal +4 -0
  131. package/sa_std/io/prelude.sa +1 -0
  132. package/sa_std/io/prelude.sal +1 -0
  133. package/sa_std/io/print.sa +2 -0
  134. package/sa_std/io/print.sai +3 -0
  135. package/sa_std/io.sa +925 -0
  136. package/sa_std/io.sai +25 -0
  137. package/sa_std/io.sal +84 -0
  138. package/sa_std/iter.sa +2 -0
  139. package/sa_std/iter.sal +1 -0
  140. package/sa_std/join_handle.sa +3 -0
  141. package/sa_std/join_handle.sal +2 -0
  142. package/sa_std/libsa_async.sa +80 -0
  143. package/sa_std/m_async.sa +137 -0
  144. package/sa_std/m_async.sal +30 -0
  145. package/sa_std/m_async.sla +2 -0
  146. package/sa_std/manually_drop.sa +3 -0
  147. package/sa_std/manually_drop.sal +2 -0
  148. package/sa_std/marker/phantom_data.sa +3 -0
  149. package/sa_std/marker/phantom_data.sal +1 -0
  150. package/sa_std/marker/prelude.sa +4 -0
  151. package/sa_std/marker/prelude.sal +4 -0
  152. package/sa_std/marker.sa +220 -0
  153. package/sa_std/marker.sal +15 -0
  154. package/sa_std/math.sa +84 -0
  155. package/sa_std/math.sai +10 -0
  156. package/sa_std/mem/manually_drop.sa +3 -0
  157. package/sa_std/mem/manually_drop.sal +1 -0
  158. package/sa_std/mem/prelude.sa +2 -0
  159. package/sa_std/mem/prelude.sal +2 -0
  160. package/sa_std/mem.sa +564 -0
  161. package/sa_std/mem.sal +40 -0
  162. package/sa_std/modstate.sai +19 -0
  163. package/sa_std/net.sa +4227 -0
  164. package/sa_std/net.sai +239 -0
  165. package/sa_std/net.sal +159 -0
  166. package/sa_std/netx.sa +85 -0
  167. package/sa_std/netx.sai +11 -0
  168. package/sa_std/netx.sal +39 -0
  169. package/sa_std/nonzero.sa +3 -0
  170. package/sa_std/nonzero.sal +2 -0
  171. package/sa_std/num/nonzero.sa +3 -0
  172. package/sa_std/num/nonzero.sal +1 -0
  173. package/sa_std/num/prelude.sa +3 -0
  174. package/sa_std/num/prelude.sal +3 -0
  175. package/sa_std/num.sa +17302 -0
  176. package/sa_std/num.sai +11 -0
  177. package/sa_std/num.sal +341 -0
  178. package/sa_std/ops.sa +1884 -0
  179. package/sa_std/ops.sal +68 -0
  180. package/sa_std/option.sa +2 -0
  181. package/sa_std/option.sal +1 -0
  182. package/sa_std/os/fd.sa +96 -0
  183. package/sa_std/os/fd.sai +7 -0
  184. package/sa_std/os/fd.sal +11 -0
  185. package/sa_std/os/prelude.sa +2 -0
  186. package/sa_std/os/prelude.sal +1 -0
  187. package/sa_std/os/unix_ffi.sa +271 -0
  188. package/sa_std/panic.sa +1 -0
  189. package/sa_std/panic.sal +1 -0
  190. package/sa_std/path.sa +3170 -0
  191. package/sa_std/path.sal +12 -0
  192. package/sa_std/phantom_data.sa +3 -0
  193. package/sa_std/phantom_data.sal +2 -0
  194. package/sa_std/pin.sa +79 -0
  195. package/sa_std/pin.sal +5 -0
  196. package/sa_std/plugin_async.sa +90 -0
  197. package/sa_std/plugin_async.sal +29 -0
  198. package/sa_std/plugin_async.sla +4 -0
  199. package/sa_std/plugin_http_async.sa +46 -0
  200. package/sa_std/plugin_http_server.sa +61 -0
  201. package/sa_std/plugin_http_server.sla +2 -0
  202. package/sa_std/plugin_sqlite.sa +106 -0
  203. package/sa_std/plugin_sqlite.sla +2 -0
  204. package/sa_std/prelude.sa +60 -0
  205. package/sa_std/prelude.sal +55 -0
  206. package/sa_std/process.sa +916 -0
  207. package/sa_std/process.sai +57 -0
  208. package/sa_std/process.sal +27 -0
  209. package/sa_std/ptr.sa +503 -0
  210. package/sa_std/ptr.sal +2 -0
  211. package/sa_std/result.sa +2 -0
  212. package/sa_std/result.sal +1 -0
  213. package/sa_std/rust_core.sa +51 -0
  214. package/sa_std/rust_core.sal +26 -0
  215. package/sa_std/sa.mod +7 -0
  216. package/sa_std/sort.sa +156 -0
  217. package/sa_std/str.sla +13 -0
  218. package/sa_std/string.sa +12240 -0
  219. package/sa_std/string.sai +25 -0
  220. package/sa_std/string.sal +17 -0
  221. package/sa_std/string_format.sa +269 -0
  222. package/sa_std/sync/atomic.sa +1500 -0
  223. package/sa_std/sync/atomic.sal +45 -0
  224. package/sa_std/sync/barrier.sa +105 -0
  225. package/sa_std/sync/barrier.sal +7 -0
  226. package/sa_std/sync/condvar.sa +240 -0
  227. package/sa_std/sync/condvar.sal +4 -0
  228. package/sa_std/sync/mpsc.sa +758 -0
  229. package/sa_std/sync/mpsc.sal +42 -0
  230. package/sa_std/sync/mpsc_list.sa +255 -0
  231. package/sa_std/sync/mpsc_list.sal +3 -0
  232. package/sa_std/sync/mutex.sa +182 -0
  233. package/sa_std/sync/mutex.sal +7 -0
  234. package/sa_std/sync/once.sa +371 -0
  235. package/sa_std/sync/once.sal +31 -0
  236. package/sa_std/sync/poison.sa +36 -0
  237. package/sa_std/sync/poison.sal +11 -0
  238. package/sa_std/sync/prelude.sa +8 -0
  239. package/sa_std/sync/prelude.sal +7 -0
  240. package/sa_std/sync/rwlock.sa +369 -0
  241. package/sa_std/sync/rwlock.sal +13 -0
  242. package/sa_std/task.sa +2 -0
  243. package/sa_std/task.sal +1 -0
  244. package/sa_std/term.sa +2 -0
  245. package/sa_std/term.sai +10 -0
  246. package/sa_std/term.sal +33 -0
  247. package/sa_std/testing/assert.sai +4 -0
  248. package/sa_std/testing/mock_io.sa +174 -0
  249. package/sa_std/testing/mock_io.sal +5 -0
  250. package/sa_std/testing/prelude.sa +2 -0
  251. package/sa_std/testing/prelude.sal +1 -0
  252. package/sa_std/text/prelude.sa +1 -0
  253. package/sa_std/text/prelude.sal +1 -0
  254. package/sa_std/text/regex.sa +2 -0
  255. package/sa_std/text/regex.sai +9 -0
  256. package/sa_std/text/regex.sal +33 -0
  257. package/sa_std/thread/join_handle.sa +3 -0
  258. package/sa_std/thread/join_handle.sal +1 -0
  259. package/sa_std/thread/prelude.sa +4 -0
  260. package/sa_std/thread/prelude.sal +3 -0
  261. package/sa_std/thread.sa +160 -0
  262. package/sa_std/thread.sai +11 -0
  263. package/sa_std/thread.sal +4 -0
  264. package/sa_std/thread_local.sa +45 -0
  265. package/sa_std/thread_local.sai +9 -0
  266. package/sa_std/time/duration.sa +3 -0
  267. package/sa_std/time/duration.sal +1 -0
  268. package/sa_std/time/instant.sa +3 -0
  269. package/sa_std/time/instant.sal +1 -0
  270. package/sa_std/time/prelude.sa +4 -0
  271. package/sa_std/time/prelude.sal +4 -0
  272. package/sa_std/time.sa +850 -0
  273. package/sa_std/time.sai +37 -0
  274. package/sa_std/time.sal +35 -0
  275. package/sa_std/time.sla +67 -0
  276. package/sa_std/tls_client.sai +39 -0
  277. package/sa_std/vec.sa +5754 -0
  278. package/sa_std/vec.sal +1 -0
  279. package/sa_std/vec_deque.sa +4925 -0
  280. package/sa_std/vec_deque.sal +8 -0
  281. package/sa_std/vec_runtime_macros.sa +11 -0
  282. package/sa_std/ws_client.sai +57 -0
@@ -0,0 +1,1072 @@
1
+ @import "btree_set.sal"
2
+ @import "btree_map.sa"
3
+
4
+ #def BTreeSet_VALUE_SENTINEL = 1
5
+
6
+ @btree_set_hash_entries_str(&hasher: ptr, entries: ptr, len: u64, idx: u64) -> void:
7
+ L_ENTRY:
8
+ done = eq idx, len
9
+ br done -> L_BTREE_SET_HASH_DONE, L_BTREE_SET_HASH_BODY
10
+
11
+ L_BTREE_SET_HASH_BODY:
12
+ entry_off = mul idx, BTreeMapEntry_SIZE
13
+ entry = ptr_add entries, entry_off
14
+ EXPAND DEFAULT_HASHER_WRITE_STR hasher, entry
15
+ next_idx = add idx, 1
16
+ call @btree_set_hash_entries_str(&hasher, entries, len, next_idx)
17
+ !next_idx
18
+ !entry
19
+ !entry_off
20
+ !done
21
+ !idx
22
+ !len
23
+ !entries
24
+ !hasher
25
+ return
26
+
27
+ L_BTREE_SET_HASH_DONE:
28
+ !done
29
+ !idx
30
+ !len
31
+ !entries
32
+ !hasher
33
+ return
34
+
35
+ @btree_set_write_hash_str(&hasher: ptr, &set: ptr) -> void:
36
+ L_ENTRY:
37
+ len = load set+BTreeSet_len as u64
38
+ entries = load set+BTreeSet_entries as ptr
39
+ EXPAND DEFAULT_HASHER_WRITE_LENGTH_PREFIX hasher, len
40
+ call @btree_set_hash_entries_str(&hasher, entries, len, 0)
41
+ !entries
42
+ !len
43
+ !set
44
+ !hasher
45
+ return
46
+
47
+ @btree_set_insert_all(&dst: ptr, &src: ptr) -> void:
48
+ L_ENTRY:
49
+ entries = load src+BTreeSet_entries as ptr
50
+ len = load src+BTreeSet_len as u64
51
+ idx_slot = stack_alloc 8
52
+ store idx_slot+0, 0 as u64
53
+ jmp L_BTREE_SET_INSERT_ALL_HEAD
54
+
55
+ L_BTREE_SET_INSERT_ALL_HEAD:
56
+ idx = load idx_slot+0 as u64
57
+ done = eq idx, len
58
+ br done -> L_BTREE_SET_INSERT_ALL_DONE, L_BTREE_SET_INSERT_ALL_BODY
59
+
60
+ L_BTREE_SET_INSERT_ALL_BODY:
61
+ entry_off = mul idx, BTreeMapEntry_SIZE
62
+ entry = ptr_add entries, entry_off
63
+ inserted = call @sa_btree_set_insert(&dst, &entry)
64
+ next_idx = add idx, 1
65
+ store idx_slot+0, next_idx as u64
66
+ !next_idx
67
+ !inserted
68
+ !entry
69
+ !entry_off
70
+ !done
71
+ !idx
72
+ jmp L_BTREE_SET_INSERT_ALL_HEAD
73
+
74
+ L_BTREE_SET_INSERT_ALL_DONE:
75
+ !done
76
+ !idx
77
+ !len
78
+ !entries
79
+ !src
80
+ !dst
81
+ return
82
+
83
+ @btree_set_insert_intersection(&dst: ptr, &src: ptr, &other: ptr) -> void:
84
+ L_ENTRY:
85
+ entries = load src+BTreeSet_entries as ptr
86
+ len = load src+BTreeSet_len as u64
87
+ idx_slot = stack_alloc 8
88
+ store idx_slot+0, 0 as u64
89
+ jmp L_BTREE_SET_INTERSECTION_HEAD
90
+
91
+ L_BTREE_SET_INTERSECTION_HEAD:
92
+ idx = load idx_slot+0 as u64
93
+ done = eq idx, len
94
+ br done -> L_BTREE_SET_INTERSECTION_DONE, L_BTREE_SET_INTERSECTION_BODY
95
+
96
+ L_BTREE_SET_INTERSECTION_BODY:
97
+ entry_off = mul idx, BTreeMapEntry_SIZE
98
+ entry = ptr_add entries, entry_off
99
+ contains = call @sa_btree_set_contains(&other, &entry)
100
+ keep = ne contains, 0
101
+ br keep -> L_BTREE_SET_INTERSECTION_KEEP, L_BTREE_SET_INTERSECTION_SKIP
102
+
103
+ L_BTREE_SET_INTERSECTION_KEEP:
104
+ inserted = call @sa_btree_set_insert(&dst, &entry)
105
+ !inserted
106
+ !keep
107
+ !contains
108
+ jmp L_BTREE_SET_INTERSECTION_NEXT
109
+
110
+ L_BTREE_SET_INTERSECTION_SKIP:
111
+ !keep
112
+ !contains
113
+ jmp L_BTREE_SET_INTERSECTION_NEXT
114
+
115
+ L_BTREE_SET_INTERSECTION_NEXT:
116
+ next_idx = add idx, 1
117
+ store idx_slot+0, next_idx as u64
118
+ !next_idx
119
+ !entry
120
+ !entry_off
121
+ !done
122
+ !idx
123
+ jmp L_BTREE_SET_INTERSECTION_HEAD
124
+
125
+ L_BTREE_SET_INTERSECTION_DONE:
126
+ !done
127
+ !idx
128
+ !len
129
+ !entries
130
+ !other
131
+ !src
132
+ !dst
133
+ return
134
+
135
+ @btree_set_insert_difference(&dst: ptr, &src: ptr, &other: ptr) -> void:
136
+ L_ENTRY:
137
+ entries = load src+BTreeSet_entries as ptr
138
+ len = load src+BTreeSet_len as u64
139
+ idx_slot = stack_alloc 8
140
+ store idx_slot+0, 0 as u64
141
+ jmp L_BTREE_SET_DIFFERENCE_HEAD
142
+
143
+ L_BTREE_SET_DIFFERENCE_HEAD:
144
+ idx = load idx_slot+0 as u64
145
+ done = eq idx, len
146
+ br done -> L_BTREE_SET_DIFFERENCE_DONE, L_BTREE_SET_DIFFERENCE_BODY
147
+
148
+ L_BTREE_SET_DIFFERENCE_BODY:
149
+ entry_off = mul idx, BTreeMapEntry_SIZE
150
+ entry = ptr_add entries, entry_off
151
+ contains = call @sa_btree_set_contains(&other, &entry)
152
+ keep = eq contains, 0
153
+ br keep -> L_BTREE_SET_DIFFERENCE_KEEP, L_BTREE_SET_DIFFERENCE_SKIP
154
+
155
+ L_BTREE_SET_DIFFERENCE_KEEP:
156
+ inserted = call @sa_btree_set_insert(&dst, &entry)
157
+ !inserted
158
+ !keep
159
+ !contains
160
+ jmp L_BTREE_SET_DIFFERENCE_NEXT
161
+
162
+ L_BTREE_SET_DIFFERENCE_SKIP:
163
+ !keep
164
+ !contains
165
+ jmp L_BTREE_SET_DIFFERENCE_NEXT
166
+
167
+ L_BTREE_SET_DIFFERENCE_NEXT:
168
+ next_idx = add idx, 1
169
+ store idx_slot+0, next_idx as u64
170
+ !next_idx
171
+ !entry
172
+ !entry_off
173
+ !done
174
+ !idx
175
+ jmp L_BTREE_SET_DIFFERENCE_HEAD
176
+
177
+ L_BTREE_SET_DIFFERENCE_DONE:
178
+ !done
179
+ !idx
180
+ !len
181
+ !entries
182
+ !other
183
+ !src
184
+ !dst
185
+ return
186
+
187
+ @export sa_btree_set_new() -> ^ptr:
188
+ L_ENTRY:
189
+ set = call @sa_btree_map_new()
190
+ return set
191
+
192
+ @export sa_btree_set_free(^set: ptr) -> void:
193
+ L_ENTRY:
194
+ call @sa_btree_map_free(^set)
195
+ return
196
+
197
+ @export sa_btree_set_len(&set: ptr) -> u64:
198
+ L_ENTRY:
199
+ len = call @sa_btree_map_len(&set)
200
+ !set
201
+ return len
202
+
203
+ @export sa_btree_set_is_empty(&set: ptr) -> i32:
204
+ L_ENTRY:
205
+ empty = call @sa_btree_map_is_empty(&set)
206
+ !set
207
+ return empty
208
+
209
+ @export sa_btree_set_contains(&set: ptr, &key: ptr) -> i32:
210
+ L_ENTRY:
211
+ contains = call @sa_btree_map_contains_key(&set, &key)
212
+ !key
213
+ !set
214
+ return contains
215
+
216
+ @export sa_btree_set_get(&set: ptr, &key: ptr, &out_key: ptr) -> i32:
217
+ L_ENTRY:
218
+ value_slot = stack_alloc 8
219
+ found = call @sa_btree_map_try_get_key_value(&set, &key, &out_key, &value_slot)
220
+ !out_key
221
+ !key
222
+ !set
223
+ return found
224
+
225
+ @export sa_btree_set_first(&set: ptr, &out_key: ptr) -> i32:
226
+ L_ENTRY:
227
+ value_slot = stack_alloc 8
228
+ found = call @sa_btree_map_first_key_value(&set, &out_key, &value_slot)
229
+ !out_key
230
+ !set
231
+ return found
232
+
233
+ @export sa_btree_set_last(&set: ptr, &out_key: ptr) -> i32:
234
+ L_ENTRY:
235
+ value_slot = stack_alloc 8
236
+ found = call @sa_btree_map_last_key_value(&set, &out_key, &value_slot)
237
+ !out_key
238
+ !set
239
+ return found
240
+
241
+ @export sa_btree_set_take(&set: ptr, &key: ptr, &out_key: ptr) -> i32:
242
+ L_ENTRY:
243
+ value_slot = stack_alloc 8
244
+ found = call @sa_btree_map_remove_entry(&set, &key, &out_key, &value_slot)
245
+ !out_key
246
+ !key
247
+ !set
248
+ return found
249
+
250
+ @export sa_btree_set_replace(&set: ptr, &key: ptr, &out_old_key: ptr) -> i32:
251
+ L_ENTRY:
252
+ replaced = call @sa_btree_set_take(&set, &key, &out_old_key)
253
+ call @sa_btree_map_insert(&set, &key, BTreeSet_VALUE_SENTINEL)
254
+ !out_old_key
255
+ !key
256
+ !set
257
+ return replaced
258
+
259
+ @export sa_btree_set_pop_first(&set: ptr, &out_key: ptr) -> i32:
260
+ L_ENTRY:
261
+ value_slot = stack_alloc 8
262
+ found = call @sa_btree_map_pop_first(&set, &out_key, &value_slot)
263
+ !out_key
264
+ !set
265
+ return found
266
+
267
+ @export sa_btree_set_pop_last(&set: ptr, &out_key: ptr) -> i32:
268
+ L_ENTRY:
269
+ value_slot = stack_alloc 8
270
+ found = call @sa_btree_map_pop_last(&set, &out_key, &value_slot)
271
+ !out_key
272
+ !set
273
+ return found
274
+
275
+ @export sa_btree_set_is_subset(&set: ptr, &other: ptr) -> i32:
276
+ L_ENTRY:
277
+ len = load set+BTreeSet_len as u64
278
+ other_len = load other+BTreeSet_len as u64
279
+ too_large = ugt len, other_len
280
+ br too_large -> L_SUBSET_FALSE_FAST, L_SUBSET_SCAN_INIT
281
+
282
+ L_SUBSET_SCAN_INIT:
283
+ entries = load set+BTreeSet_entries as ptr
284
+ idx_slot = stack_alloc 8
285
+ store idx_slot+0, 0 as u64
286
+ jmp L_SUBSET_HEAD
287
+
288
+ L_SUBSET_HEAD:
289
+ idx = load idx_slot+0 as u64
290
+ done = eq idx, len
291
+ br done -> L_SUBSET_TRUE, L_SUBSET_BODY
292
+
293
+ L_SUBSET_BODY:
294
+ entry_off = mul idx, BTreeMapEntry_SIZE
295
+ entry = ptr_add entries, entry_off
296
+ contains = call @sa_btree_set_contains(&other, &entry)
297
+ has_key = ne contains, 0
298
+ br has_key -> L_SUBSET_NEXT, L_SUBSET_FALSE
299
+
300
+ L_SUBSET_NEXT:
301
+ next_idx = add idx, 1
302
+ store idx_slot+0, next_idx as u64
303
+ !next_idx
304
+ !has_key
305
+ !contains
306
+ !entry
307
+ !entry_off
308
+ !done
309
+ !idx
310
+ jmp L_SUBSET_HEAD
311
+
312
+ L_SUBSET_TRUE:
313
+ !done
314
+ !idx
315
+ !entries
316
+ !too_large
317
+ !other_len
318
+ !len
319
+ !other
320
+ !set
321
+ return 1
322
+
323
+ L_SUBSET_FALSE:
324
+ !has_key
325
+ !contains
326
+ !entry
327
+ !entry_off
328
+ !done
329
+ !idx
330
+ !entries
331
+ !too_large
332
+ !other_len
333
+ !len
334
+ !other
335
+ !set
336
+ return 0
337
+
338
+ L_SUBSET_FALSE_FAST:
339
+ !too_large
340
+ !other_len
341
+ !len
342
+ !other
343
+ !set
344
+ return 0
345
+
346
+ @export sa_btree_set_is_superset(&set: ptr, &other: ptr) -> i32:
347
+ L_ENTRY:
348
+ result = call @sa_btree_set_is_subset(&other, &set)
349
+ !other
350
+ !set
351
+ return result
352
+
353
+ @export sa_btree_set_is_disjoint(&set: ptr, &other: ptr) -> i32:
354
+ L_ENTRY:
355
+ entries = load set+BTreeSet_entries as ptr
356
+ len = load set+BTreeSet_len as u64
357
+ idx_slot = stack_alloc 8
358
+ store idx_slot+0, 0 as u64
359
+ jmp L_DISJOINT_HEAD
360
+
361
+ L_DISJOINT_HEAD:
362
+ idx = load idx_slot+0 as u64
363
+ done = eq idx, len
364
+ br done -> L_DISJOINT_TRUE, L_DISJOINT_BODY
365
+
366
+ L_DISJOINT_BODY:
367
+ entry_off = mul idx, BTreeMapEntry_SIZE
368
+ entry = ptr_add entries, entry_off
369
+ contains = call @sa_btree_set_contains(&other, &entry)
370
+ overlaps = ne contains, 0
371
+ br overlaps -> L_DISJOINT_FALSE, L_DISJOINT_NEXT
372
+
373
+ L_DISJOINT_NEXT:
374
+ next_idx = add idx, 1
375
+ store idx_slot+0, next_idx as u64
376
+ !next_idx
377
+ !overlaps
378
+ !contains
379
+ !entry
380
+ !entry_off
381
+ !done
382
+ !idx
383
+ jmp L_DISJOINT_HEAD
384
+
385
+ L_DISJOINT_TRUE:
386
+ !done
387
+ !idx
388
+ !len
389
+ !entries
390
+ !other
391
+ !set
392
+ return 1
393
+
394
+ L_DISJOINT_FALSE:
395
+ !overlaps
396
+ !contains
397
+ !entry
398
+ !entry_off
399
+ !done
400
+ !idx
401
+ !len
402
+ !entries
403
+ !other
404
+ !set
405
+ return 0
406
+
407
+ @export sa_btree_set_append(&set: ptr, &other: ptr) -> void:
408
+ L_ENTRY:
409
+ call @sa_btree_map_append(&set, &other)
410
+ !other
411
+ !set
412
+ return
413
+
414
+ @export sa_btree_set_split_off(&set: ptr, &key: ptr) -> ^ptr:
415
+ L_ENTRY:
416
+ tail = call @sa_btree_map_split_off(&set, &key)
417
+ !key
418
+ !set
419
+ return tail
420
+
421
+ @export sa_btree_set_range(&set: ptr, &start_key: ptr, &end_key: ptr) -> ^ptr:
422
+ L_ENTRY:
423
+ out_set = call @sa_btree_map_range(&set, &start_key, &end_key)
424
+ !end_key
425
+ !start_key
426
+ !set
427
+ return out_set
428
+
429
+ @export sa_btree_set_clear(&set: ptr) -> void:
430
+ L_ENTRY:
431
+ call @sa_btree_map_clear(&set)
432
+ !set
433
+ return
434
+
435
+ @export sa_btree_set_insert(&set: ptr, &key: ptr) -> i32:
436
+ L_ENTRY:
437
+ len_before = call @sa_btree_map_len(&set)
438
+ call @sa_btree_map_insert(&set, &key, BTreeSet_VALUE_SENTINEL)
439
+ len_after = call @sa_btree_map_len(&set)
440
+ inserted = ne len_after, len_before
441
+ result = inserted as i32
442
+ !len_after
443
+ !len_before
444
+ !key
445
+ !set
446
+ return result
447
+
448
+ @export sa_btree_set_remove(&set: ptr, &key: ptr) -> i32:
449
+ L_ENTRY:
450
+ removed = call @sa_btree_map_remove(&set, &key)
451
+ present = ne removed, 0
452
+ result = present as i32
453
+ !removed
454
+ !key
455
+ !set
456
+ return result
457
+
458
+ @export sa_btree_set_union(&set: ptr, &other: ptr) -> ^ptr:
459
+ L_ENTRY:
460
+ out_set = call @sa_btree_set_new()
461
+ call @btree_set_insert_all(&out_set, &set)
462
+ call @btree_set_insert_all(&out_set, &other)
463
+ !other
464
+ !set
465
+ return out_set
466
+
467
+ @export sa_btree_set_intersection(&set: ptr, &other: ptr) -> ^ptr:
468
+ L_ENTRY:
469
+ len = load set+BTreeSet_len as u64
470
+ other_len = load other+BTreeSet_len as u64
471
+ left_smaller = ule len, other_len
472
+ br left_smaller -> L_BTREE_SET_INTERSECTION_LEFT, L_BTREE_SET_INTERSECTION_RIGHT
473
+
474
+ L_BTREE_SET_INTERSECTION_LEFT:
475
+ out_set = call @sa_btree_set_new()
476
+ call @btree_set_insert_intersection(&out_set, &set, &other)
477
+ !left_smaller
478
+ !other_len
479
+ !len
480
+ !other
481
+ !set
482
+ return out_set
483
+
484
+ L_BTREE_SET_INTERSECTION_RIGHT:
485
+ out_set = call @sa_btree_set_new()
486
+ call @btree_set_insert_intersection(&out_set, &other, &set)
487
+ !left_smaller
488
+ !other_len
489
+ !len
490
+ !other
491
+ !set
492
+ return out_set
493
+
494
+ @export sa_btree_set_difference(&set: ptr, &other: ptr) -> ^ptr:
495
+ L_ENTRY:
496
+ out_set = call @sa_btree_set_new()
497
+ call @btree_set_insert_difference(&out_set, &set, &other)
498
+ !other
499
+ !set
500
+ return out_set
501
+
502
+ @export sa_btree_set_symmetric_difference(&set: ptr, &other: ptr) -> ^ptr:
503
+ L_ENTRY:
504
+ out_set = call @sa_btree_set_new()
505
+ call @btree_set_insert_difference(&out_set, &set, &other)
506
+ call @btree_set_insert_difference(&out_set, &other, &set)
507
+ !other
508
+ !set
509
+ return out_set
510
+
511
+ @export sa_btree_set_iter_vec(&set: ptr) -> ^ptr:
512
+ L_ENTRY:
513
+ len = load set+BTreeSet_len as u64
514
+ EXPAND NUM_U64_CHECKED_MUL btree_set_iter_cap_ok, btree_set_iter_cap, len, 2
515
+ br btree_set_iter_cap_ok -> L_BTREE_SET_ITER_CAP_OK, L_BTREE_SET_ITER_CAP_OVERFLOW
516
+
517
+ L_BTREE_SET_ITER_CAP_OVERFLOW:
518
+ panic(2206)
519
+
520
+ L_BTREE_SET_ITER_CAP_OK:
521
+ out_vec = call @sa_vec_with_capacity(btree_set_iter_cap, 8)
522
+ entries = load set+BTreeSet_entries as ptr
523
+ idx_slot = stack_alloc 8
524
+ store idx_slot+0, 0 as u64
525
+ jmp L_BTREE_SET_ITER_HEAD
526
+
527
+ L_BTREE_SET_ITER_HEAD:
528
+ idx = load idx_slot+0 as u64
529
+ done = eq idx, len
530
+ br done -> L_BTREE_SET_ITER_DONE, L_BTREE_SET_ITER_BODY
531
+
532
+ L_BTREE_SET_ITER_BODY:
533
+ entry_off = mul idx, BTreeMapEntry_SIZE
534
+ entry = ptr_add entries, entry_off
535
+ key_ptr = load entry+BTreeMapEntry_key_ptr as ptr
536
+ key_len = load entry+BTreeMapEntry_key_len as u64
537
+ key_ptr_bits = bitcast key_ptr as u64
538
+ out_vec = call @sa_vec_push(^out_vec, key_ptr_bits, 8)
539
+ out_vec = call @sa_vec_push(^out_vec, key_len, 8)
540
+ next_idx = add idx, 1
541
+ store idx_slot+0, next_idx as u64
542
+ !next_idx
543
+ !key_ptr_bits
544
+ !key_len
545
+ !key_ptr
546
+ !entry
547
+ !entry_off
548
+ !done
549
+ !idx
550
+ jmp L_BTREE_SET_ITER_HEAD
551
+
552
+ L_BTREE_SET_ITER_DONE:
553
+ !done
554
+ !idx
555
+ !entries
556
+ !btree_set_iter_cap_ok
557
+ !btree_set_iter_cap
558
+ !len
559
+ !set
560
+ return out_vec
561
+
562
+ [MACRO] BTREE_SET_NEW %out_set
563
+ %out_set = call @sa_btree_set_new()
564
+ [END_MACRO]
565
+
566
+ [MACRO] BTREE_SET_FREE %set_reg
567
+ call @sa_btree_set_free(^%set_reg)
568
+ [END_MACRO]
569
+
570
+ [MACRO] BTREE_SET_LEN %out_len, %set_reg
571
+ %out_len = call @sa_btree_set_len(&%set_reg)
572
+ [END_MACRO]
573
+
574
+ [MACRO] BTREE_SET_IS_EMPTY %out_flag, %set_reg
575
+ %out_flag = call @sa_btree_set_is_empty(&%set_reg)
576
+ [END_MACRO]
577
+
578
+ [MACRO] BTREE_SET_CONTAINS %out_flag, %set_reg, %key_reg
579
+ %out_flag = call @sa_btree_set_contains(&%set_reg, &%key_reg)
580
+ [END_MACRO]
581
+
582
+ [MACRO] BTREE_SET_GET %out_ok, %out_key, %set_reg, %key_reg
583
+ %out_key = alloc Slice_SIZE
584
+ %out_ok = call @sa_btree_set_get(&%set_reg, &%key_reg, &%out_key)
585
+ [END_MACRO]
586
+
587
+ [MACRO] BTREE_SET_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key_reg
588
+ %out_inserted = call @sa_btree_set_insert(&%set_reg, &%key_reg)
589
+ %out_key = alloc Slice_SIZE
590
+ __btree_set_get_or_insert_ok_%out_inserted = call @sa_btree_set_get(&%set_reg, &%key_reg, &%out_key)
591
+ !__btree_set_get_or_insert_ok_%out_inserted
592
+ [END_MACRO]
593
+
594
+ [MACRO] BTREE_SET_ENTRY_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key_reg
595
+ EXPAND BTREE_SET_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key_reg
596
+ [END_MACRO]
597
+
598
+ // Rust method-name bare alias for the common set entry path (get_or_insert).
599
+ [MACRO] BTREE_SET_ENTRY %out_inserted, %out_key, %set_reg, %key_reg
600
+ EXPAND BTREE_SET_ENTRY_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key_reg
601
+ [END_MACRO]
602
+
603
+ [MACRO] BTREE_SET_OR_INSERT %out_inserted, %out_key, %set_reg, %key_reg
604
+ EXPAND BTREE_SET_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key_reg
605
+ [END_MACRO]
606
+
607
+ [MACRO] BTREE_SET_FIRST %out_ok, %out_key, %set_reg
608
+ %out_key = alloc Slice_SIZE
609
+ %out_ok = call @sa_btree_set_first(&%set_reg, &%out_key)
610
+ [END_MACRO]
611
+
612
+ [MACRO] BTREE_SET_LAST %out_ok, %out_key, %set_reg
613
+ %out_key = alloc Slice_SIZE
614
+ %out_ok = call @sa_btree_set_last(&%set_reg, &%out_key)
615
+ [END_MACRO]
616
+
617
+ [MACRO] BTREE_SET_CLEAR %set_reg
618
+ call @sa_btree_set_clear(&%set_reg)
619
+ [END_MACRO]
620
+
621
+ [MACRO] DEFAULT_HASHER_WRITE_BTREE_SET_STR %hasher, %set_reg
622
+ call @btree_set_write_hash_str(&%hasher, &%set_reg)
623
+ [END_MACRO]
624
+
625
+ [MACRO] BTREE_SET_HASH_STR %out_hash, %set_reg
626
+ __btree_set_hash_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
627
+ EXPAND DEFAULT_HASHER_NEW __btree_set_hash_hasher_%out_hash
628
+ EXPAND DEFAULT_HASHER_WRITE_BTREE_SET_STR __btree_set_hash_hasher_%out_hash, %set_reg
629
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __btree_set_hash_hasher_%out_hash
630
+ [END_MACRO]
631
+
632
+ // Rust method-name bare alias over BTREE_SET_HASH_STR.
633
+ [MACRO] BTREE_SET_HASH %out_hash, %set_reg
634
+ EXPAND BTREE_SET_HASH_STR %out_hash, %set_reg
635
+ [END_MACRO]
636
+
637
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_BTREE_SET_STR %out_hash, %builder, %set_reg
638
+ __build_hash_one_btree_set_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
639
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_btree_set_hasher_%out_hash, %builder
640
+ EXPAND DEFAULT_HASHER_WRITE_BTREE_SET_STR __build_hash_one_btree_set_hasher_%out_hash, %set_reg
641
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_btree_set_hasher_%out_hash
642
+ [END_MACRO]
643
+
644
+ // Rust method-name bare alias over BUILD_HASHER_DEFAULT_HASH_ONE_BTREE_SET_STR.
645
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_BTREE_SET %out_hash, %builder, %set_reg
646
+ EXPAND BUILD_HASHER_DEFAULT_HASH_ONE_BTREE_SET_STR %out_hash, %builder, %set_reg
647
+ [END_MACRO]
648
+
649
+ [MACRO] RANDOM_STATE_HASH_ONE_BTREE_SET_STR %out_hash, %state, %set_reg
650
+ __random_state_hash_one_btree_set_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
651
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_btree_set_hasher_%out_hash, %state
652
+ EXPAND DEFAULT_HASHER_WRITE_BTREE_SET_STR __random_state_hash_one_btree_set_hasher_%out_hash, %set_reg
653
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_btree_set_hasher_%out_hash
654
+ [END_MACRO]
655
+
656
+ // Rust method-name bare alias over RANDOM_STATE_HASH_ONE_BTREE_SET_STR.
657
+ [MACRO] RANDOM_STATE_HASH_ONE_BTREE_SET %out_hash, %state, %set_reg
658
+ EXPAND RANDOM_STATE_HASH_ONE_BTREE_SET_STR %out_hash, %state, %set_reg
659
+ [END_MACRO]
660
+
661
+ [MACRO] BTREE_SET_RETAIN %out_len, %set_reg, %pred_fn
662
+ __btree_set_retain_entries_%out_len = load %set_reg+BTreeSet_entries as ptr
663
+ __btree_set_retain_len_%out_len = load %set_reg+BTreeSet_len as u64
664
+ __btree_set_retain_read_slot_%out_len = stack_alloc 8
665
+ __btree_set_retain_write_slot_%out_len = stack_alloc 8
666
+ store __btree_set_retain_read_slot_%out_len+0, 0 as u64
667
+ store __btree_set_retain_write_slot_%out_len+0, 0 as u64
668
+ jmp L_BTREE_SET_RETAIN_HEAD_%out_len
669
+
670
+ L_BTREE_SET_RETAIN_HEAD_%out_len:
671
+ __btree_set_retain_read_%out_len = load __btree_set_retain_read_slot_%out_len+0 as u64
672
+ __btree_set_retain_done_%out_len = eq __btree_set_retain_read_%out_len, __btree_set_retain_len_%out_len
673
+ br __btree_set_retain_done_%out_len -> L_BTREE_SET_RETAIN_CLEAR_HEAD_%out_len, L_BTREE_SET_RETAIN_BODY_%out_len
674
+
675
+ L_BTREE_SET_RETAIN_BODY_%out_len:
676
+ __btree_set_retain_read_off_%out_len = mul __btree_set_retain_read_%out_len, BTreeMapEntry_SIZE
677
+ __btree_set_retain_read_entry_%out_len = ptr_add __btree_set_retain_entries_%out_len, __btree_set_retain_read_off_%out_len
678
+ __btree_set_retain_pred_%out_len = call %pred_fn(&__btree_set_retain_read_entry_%out_len)
679
+ __btree_set_retain_keep_%out_len = ne __btree_set_retain_pred_%out_len, 0
680
+ br __btree_set_retain_keep_%out_len -> L_BTREE_SET_RETAIN_KEEP_%out_len, L_BTREE_SET_RETAIN_SKIP_%out_len
681
+
682
+ L_BTREE_SET_RETAIN_KEEP_%out_len:
683
+ __btree_set_retain_write_%out_len = load __btree_set_retain_write_slot_%out_len+0 as u64
684
+ __btree_set_retain_same_slot_%out_len = eq __btree_set_retain_write_%out_len, __btree_set_retain_read_%out_len
685
+ br __btree_set_retain_same_slot_%out_len -> L_BTREE_SET_RETAIN_KEEP_ADVANCE_%out_len, L_BTREE_SET_RETAIN_COPY_%out_len
686
+
687
+ L_BTREE_SET_RETAIN_COPY_%out_len:
688
+ __btree_set_retain_write_off_%out_len = mul __btree_set_retain_write_%out_len, BTreeMapEntry_SIZE
689
+ __btree_set_retain_write_entry_%out_len = ptr_add __btree_set_retain_entries_%out_len, __btree_set_retain_write_off_%out_len
690
+ __btree_set_retain_key_ptr_%out_len = load __btree_set_retain_read_entry_%out_len+BTreeMapEntry_key_ptr as ptr
691
+ __btree_set_retain_key_len_%out_len = load __btree_set_retain_read_entry_%out_len+BTreeMapEntry_key_len as u64
692
+ __btree_set_retain_value_%out_len = load __btree_set_retain_read_entry_%out_len+BTreeMapEntry_value as u64
693
+ store __btree_set_retain_write_entry_%out_len+BTreeMapEntry_key_ptr, __btree_set_retain_key_ptr_%out_len as ptr
694
+ store __btree_set_retain_write_entry_%out_len+BTreeMapEntry_key_len, __btree_set_retain_key_len_%out_len as u64
695
+ store __btree_set_retain_write_entry_%out_len+BTreeMapEntry_value, __btree_set_retain_value_%out_len as u64
696
+ !__btree_set_retain_value_%out_len
697
+ !__btree_set_retain_key_len_%out_len
698
+ !__btree_set_retain_key_ptr_%out_len
699
+ !__btree_set_retain_write_entry_%out_len
700
+ !__btree_set_retain_write_off_%out_len
701
+ jmp L_BTREE_SET_RETAIN_KEEP_ADVANCE_%out_len
702
+
703
+ L_BTREE_SET_RETAIN_KEEP_ADVANCE_%out_len:
704
+ __btree_set_retain_next_write_%out_len = add __btree_set_retain_write_%out_len, 1
705
+ store __btree_set_retain_write_slot_%out_len+0, __btree_set_retain_next_write_%out_len as u64
706
+ !__btree_set_retain_next_write_%out_len
707
+ !__btree_set_retain_same_slot_%out_len
708
+ !__btree_set_retain_write_%out_len
709
+ jmp L_BTREE_SET_RETAIN_NEXT_%out_len
710
+
711
+ L_BTREE_SET_RETAIN_SKIP_%out_len:
712
+ jmp L_BTREE_SET_RETAIN_NEXT_%out_len
713
+
714
+ L_BTREE_SET_RETAIN_NEXT_%out_len:
715
+ __btree_set_retain_next_read_%out_len = add __btree_set_retain_read_%out_len, 1
716
+ store __btree_set_retain_read_slot_%out_len+0, __btree_set_retain_next_read_%out_len as u64
717
+ !__btree_set_retain_next_read_%out_len
718
+ !__btree_set_retain_keep_%out_len
719
+ !__btree_set_retain_pred_%out_len
720
+ !__btree_set_retain_read_entry_%out_len
721
+ !__btree_set_retain_read_off_%out_len
722
+ !__btree_set_retain_done_%out_len
723
+ !__btree_set_retain_read_%out_len
724
+ jmp L_BTREE_SET_RETAIN_HEAD_%out_len
725
+
726
+ L_BTREE_SET_RETAIN_CLEAR_HEAD_%out_len:
727
+ __btree_set_retain_clear_slot_%out_len = stack_alloc 8
728
+ __btree_set_retain_kept_len_%out_len = load __btree_set_retain_write_slot_%out_len+0 as u64
729
+ store __btree_set_retain_clear_slot_%out_len+0, __btree_set_retain_kept_len_%out_len as u64
730
+ jmp L_BTREE_SET_RETAIN_CLEAR_LOOP_%out_len
731
+
732
+ L_BTREE_SET_RETAIN_CLEAR_LOOP_%out_len:
733
+ __btree_set_retain_clear_idx_%out_len = load __btree_set_retain_clear_slot_%out_len+0 as u64
734
+ __btree_set_retain_clear_done_%out_len = eq __btree_set_retain_clear_idx_%out_len, __btree_set_retain_len_%out_len
735
+ br __btree_set_retain_clear_done_%out_len -> L_BTREE_SET_RETAIN_DONE_%out_len, L_BTREE_SET_RETAIN_CLEAR_BODY_%out_len
736
+
737
+ L_BTREE_SET_RETAIN_CLEAR_BODY_%out_len:
738
+ __btree_set_retain_clear_off_%out_len = mul __btree_set_retain_clear_idx_%out_len, BTreeMapEntry_SIZE
739
+ __btree_set_retain_clear_entry_%out_len = ptr_add __btree_set_retain_entries_%out_len, __btree_set_retain_clear_off_%out_len
740
+ store __btree_set_retain_clear_entry_%out_len+BTreeMapEntry_key_ptr, 0 as ptr
741
+ store __btree_set_retain_clear_entry_%out_len+BTreeMapEntry_key_len, 0 as u64
742
+ store __btree_set_retain_clear_entry_%out_len+BTreeMapEntry_value, 0 as u64
743
+ __btree_set_retain_next_clear_%out_len = add __btree_set_retain_clear_idx_%out_len, 1
744
+ store __btree_set_retain_clear_slot_%out_len+0, __btree_set_retain_next_clear_%out_len as u64
745
+ !__btree_set_retain_next_clear_%out_len
746
+ !__btree_set_retain_clear_entry_%out_len
747
+ !__btree_set_retain_clear_off_%out_len
748
+ !__btree_set_retain_clear_done_%out_len
749
+ !__btree_set_retain_clear_idx_%out_len
750
+ jmp L_BTREE_SET_RETAIN_CLEAR_LOOP_%out_len
751
+
752
+ L_BTREE_SET_RETAIN_DONE_%out_len:
753
+ %out_len = load __btree_set_retain_write_slot_%out_len+0 as u64
754
+ store %set_reg+BTreeSet_len, %out_len as u64
755
+ !__btree_set_retain_clear_done_%out_len
756
+ !__btree_set_retain_clear_idx_%out_len
757
+ !__btree_set_retain_kept_len_%out_len
758
+ !__btree_set_retain_done_%out_len
759
+ !__btree_set_retain_read_%out_len
760
+ !__btree_set_retain_len_%out_len
761
+ !__btree_set_retain_entries_%out_len
762
+ [END_MACRO]
763
+
764
+ [MACRO] BTREE_SET_EXTRACT_IF %out_len, %out_set, %set_reg, %pred_fn
765
+ EXPAND BTREE_SET_NEW %out_set
766
+ __btree_set_extract_entries_%out_len = load %set_reg+BTreeSet_entries as ptr
767
+ __btree_set_extract_len_%out_len = load %set_reg+BTreeSet_len as u64
768
+ __btree_set_extract_read_slot_%out_len = stack_alloc 8
769
+ __btree_set_extract_write_slot_%out_len = stack_alloc 8
770
+ store __btree_set_extract_read_slot_%out_len+0, 0 as u64
771
+ store __btree_set_extract_write_slot_%out_len+0, 0 as u64
772
+ jmp L_BTREE_SET_EXTRACT_HEAD_%out_len
773
+
774
+ L_BTREE_SET_EXTRACT_HEAD_%out_len:
775
+ __btree_set_extract_read_%out_len = load __btree_set_extract_read_slot_%out_len+0 as u64
776
+ __btree_set_extract_done_%out_len = eq __btree_set_extract_read_%out_len, __btree_set_extract_len_%out_len
777
+ br __btree_set_extract_done_%out_len -> L_BTREE_SET_EXTRACT_CLEAR_HEAD_%out_len, L_BTREE_SET_EXTRACT_BODY_%out_len
778
+
779
+ L_BTREE_SET_EXTRACT_BODY_%out_len:
780
+ __btree_set_extract_read_off_%out_len = mul __btree_set_extract_read_%out_len, BTreeMapEntry_SIZE
781
+ __btree_set_extract_read_entry_%out_len = ptr_add __btree_set_extract_entries_%out_len, __btree_set_extract_read_off_%out_len
782
+ __btree_set_extract_pred_%out_len = call %pred_fn(&__btree_set_extract_read_entry_%out_len)
783
+ __btree_set_extract_take_%out_len = ne __btree_set_extract_pred_%out_len, 0
784
+ br __btree_set_extract_take_%out_len -> L_BTREE_SET_EXTRACT_TAKE_%out_len, L_BTREE_SET_EXTRACT_KEEP_%out_len
785
+
786
+ L_BTREE_SET_EXTRACT_TAKE_%out_len:
787
+ __btree_set_extract_inserted_%out_len = call @sa_btree_set_insert(&%out_set, &__btree_set_extract_read_entry_%out_len)
788
+ !__btree_set_extract_inserted_%out_len
789
+ jmp L_BTREE_SET_EXTRACT_NEXT_%out_len
790
+
791
+ L_BTREE_SET_EXTRACT_KEEP_%out_len:
792
+ __btree_set_extract_write_%out_len = load __btree_set_extract_write_slot_%out_len+0 as u64
793
+ __btree_set_extract_same_slot_%out_len = eq __btree_set_extract_write_%out_len, __btree_set_extract_read_%out_len
794
+ br __btree_set_extract_same_slot_%out_len -> L_BTREE_SET_EXTRACT_KEEP_ADVANCE_%out_len, L_BTREE_SET_EXTRACT_COPY_%out_len
795
+
796
+ L_BTREE_SET_EXTRACT_COPY_%out_len:
797
+ __btree_set_extract_write_off_%out_len = mul __btree_set_extract_write_%out_len, BTreeMapEntry_SIZE
798
+ __btree_set_extract_write_entry_%out_len = ptr_add __btree_set_extract_entries_%out_len, __btree_set_extract_write_off_%out_len
799
+ __btree_set_extract_key_ptr_%out_len = load __btree_set_extract_read_entry_%out_len+BTreeMapEntry_key_ptr as ptr
800
+ __btree_set_extract_key_len_%out_len = load __btree_set_extract_read_entry_%out_len+BTreeMapEntry_key_len as u64
801
+ __btree_set_extract_value_%out_len = load __btree_set_extract_read_entry_%out_len+BTreeMapEntry_value as u64
802
+ store __btree_set_extract_write_entry_%out_len+BTreeMapEntry_key_ptr, __btree_set_extract_key_ptr_%out_len as ptr
803
+ store __btree_set_extract_write_entry_%out_len+BTreeMapEntry_key_len, __btree_set_extract_key_len_%out_len as u64
804
+ store __btree_set_extract_write_entry_%out_len+BTreeMapEntry_value, __btree_set_extract_value_%out_len as u64
805
+ !__btree_set_extract_value_%out_len
806
+ !__btree_set_extract_key_len_%out_len
807
+ !__btree_set_extract_key_ptr_%out_len
808
+ !__btree_set_extract_write_entry_%out_len
809
+ !__btree_set_extract_write_off_%out_len
810
+ jmp L_BTREE_SET_EXTRACT_KEEP_ADVANCE_%out_len
811
+
812
+ L_BTREE_SET_EXTRACT_KEEP_ADVANCE_%out_len:
813
+ __btree_set_extract_next_write_%out_len = add __btree_set_extract_write_%out_len, 1
814
+ store __btree_set_extract_write_slot_%out_len+0, __btree_set_extract_next_write_%out_len as u64
815
+ !__btree_set_extract_next_write_%out_len
816
+ !__btree_set_extract_same_slot_%out_len
817
+ !__btree_set_extract_write_%out_len
818
+ jmp L_BTREE_SET_EXTRACT_NEXT_%out_len
819
+
820
+ L_BTREE_SET_EXTRACT_NEXT_%out_len:
821
+ __btree_set_extract_next_read_%out_len = add __btree_set_extract_read_%out_len, 1
822
+ store __btree_set_extract_read_slot_%out_len+0, __btree_set_extract_next_read_%out_len as u64
823
+ !__btree_set_extract_next_read_%out_len
824
+ !__btree_set_extract_take_%out_len
825
+ !__btree_set_extract_pred_%out_len
826
+ !__btree_set_extract_read_entry_%out_len
827
+ !__btree_set_extract_read_off_%out_len
828
+ !__btree_set_extract_done_%out_len
829
+ !__btree_set_extract_read_%out_len
830
+ jmp L_BTREE_SET_EXTRACT_HEAD_%out_len
831
+
832
+ L_BTREE_SET_EXTRACT_CLEAR_HEAD_%out_len:
833
+ __btree_set_extract_clear_slot_%out_len = stack_alloc 8
834
+ __btree_set_extract_kept_len_%out_len = load __btree_set_extract_write_slot_%out_len+0 as u64
835
+ store __btree_set_extract_clear_slot_%out_len+0, __btree_set_extract_kept_len_%out_len as u64
836
+ jmp L_BTREE_SET_EXTRACT_CLEAR_LOOP_%out_len
837
+
838
+ L_BTREE_SET_EXTRACT_CLEAR_LOOP_%out_len:
839
+ __btree_set_extract_clear_idx_%out_len = load __btree_set_extract_clear_slot_%out_len+0 as u64
840
+ __btree_set_extract_clear_done_%out_len = eq __btree_set_extract_clear_idx_%out_len, __btree_set_extract_len_%out_len
841
+ br __btree_set_extract_clear_done_%out_len -> L_BTREE_SET_EXTRACT_DONE_%out_len, L_BTREE_SET_EXTRACT_CLEAR_BODY_%out_len
842
+
843
+ L_BTREE_SET_EXTRACT_CLEAR_BODY_%out_len:
844
+ __btree_set_extract_clear_off_%out_len = mul __btree_set_extract_clear_idx_%out_len, BTreeMapEntry_SIZE
845
+ __btree_set_extract_clear_entry_%out_len = ptr_add __btree_set_extract_entries_%out_len, __btree_set_extract_clear_off_%out_len
846
+ store __btree_set_extract_clear_entry_%out_len+BTreeMapEntry_key_ptr, 0 as ptr
847
+ store __btree_set_extract_clear_entry_%out_len+BTreeMapEntry_key_len, 0 as u64
848
+ store __btree_set_extract_clear_entry_%out_len+BTreeMapEntry_value, 0 as u64
849
+ __btree_set_extract_next_clear_%out_len = add __btree_set_extract_clear_idx_%out_len, 1
850
+ store __btree_set_extract_clear_slot_%out_len+0, __btree_set_extract_next_clear_%out_len as u64
851
+ !__btree_set_extract_next_clear_%out_len
852
+ !__btree_set_extract_clear_entry_%out_len
853
+ !__btree_set_extract_clear_off_%out_len
854
+ !__btree_set_extract_clear_done_%out_len
855
+ !__btree_set_extract_clear_idx_%out_len
856
+ jmp L_BTREE_SET_EXTRACT_CLEAR_LOOP_%out_len
857
+
858
+ L_BTREE_SET_EXTRACT_DONE_%out_len:
859
+ %out_len = load __btree_set_extract_write_slot_%out_len+0 as u64
860
+ store %set_reg+BTreeSet_len, %out_len as u64
861
+ !__btree_set_extract_clear_done_%out_len
862
+ !__btree_set_extract_clear_idx_%out_len
863
+ !__btree_set_extract_kept_len_%out_len
864
+ !__btree_set_extract_done_%out_len
865
+ !__btree_set_extract_read_%out_len
866
+ !__btree_set_extract_len_%out_len
867
+ !__btree_set_extract_entries_%out_len
868
+ [END_MACRO]
869
+
870
+ [MACRO] BTREE_SET_EXTRACT_IF_RANGE %out_len, %out_set, %set_reg, %start_key, %end_key, %pred_fn
871
+ EXPAND BTREE_SET_NEW %out_set
872
+ EXPAND BTREE_SET_RANGE __btree_set_extract_range_snapshot_%out_len, %set_reg, %start_key, %end_key
873
+ __btree_set_extract_range_entries_%out_len = load __btree_set_extract_range_snapshot_%out_len+BTreeSet_entries as ptr
874
+ __btree_set_extract_range_len_%out_len = load __btree_set_extract_range_snapshot_%out_len+BTreeSet_len as u64
875
+ __btree_set_extract_range_idx_slot_%out_len = stack_alloc 8
876
+ store __btree_set_extract_range_idx_slot_%out_len+0, 0 as u64
877
+ jmp L_BTREE_SET_EXTRACT_RANGE_HEAD_%out_len
878
+
879
+ L_BTREE_SET_EXTRACT_RANGE_HEAD_%out_len:
880
+ __btree_set_extract_range_idx_%out_len = load __btree_set_extract_range_idx_slot_%out_len+0 as u64
881
+ __btree_set_extract_range_done_%out_len = eq __btree_set_extract_range_idx_%out_len, __btree_set_extract_range_len_%out_len
882
+ br __btree_set_extract_range_done_%out_len -> L_BTREE_SET_EXTRACT_RANGE_REMOVE_INIT_%out_len, L_BTREE_SET_EXTRACT_RANGE_BODY_%out_len
883
+
884
+ L_BTREE_SET_EXTRACT_RANGE_BODY_%out_len:
885
+ __btree_set_extract_range_off_%out_len = mul __btree_set_extract_range_idx_%out_len, BTreeMapEntry_SIZE
886
+ __btree_set_extract_range_entry_%out_len = ptr_add __btree_set_extract_range_entries_%out_len, __btree_set_extract_range_off_%out_len
887
+ __btree_set_extract_range_pred_%out_len = call %pred_fn(&__btree_set_extract_range_entry_%out_len)
888
+ __btree_set_extract_range_take_%out_len = ne __btree_set_extract_range_pred_%out_len, 0
889
+ br __btree_set_extract_range_take_%out_len -> L_BTREE_SET_EXTRACT_RANGE_TAKE_%out_len, L_BTREE_SET_EXTRACT_RANGE_NEXT_%out_len
890
+
891
+ L_BTREE_SET_EXTRACT_RANGE_TAKE_%out_len:
892
+ __btree_set_extract_range_inserted_%out_len = call @sa_btree_set_insert(&%out_set, &__btree_set_extract_range_entry_%out_len)
893
+ !__btree_set_extract_range_inserted_%out_len
894
+ jmp L_BTREE_SET_EXTRACT_RANGE_NEXT_%out_len
895
+
896
+ L_BTREE_SET_EXTRACT_RANGE_NEXT_%out_len:
897
+ __btree_set_extract_range_next_idx_%out_len = add __btree_set_extract_range_idx_%out_len, 1
898
+ store __btree_set_extract_range_idx_slot_%out_len+0, __btree_set_extract_range_next_idx_%out_len as u64
899
+ !__btree_set_extract_range_next_idx_%out_len
900
+ !__btree_set_extract_range_take_%out_len
901
+ !__btree_set_extract_range_pred_%out_len
902
+ !__btree_set_extract_range_entry_%out_len
903
+ !__btree_set_extract_range_off_%out_len
904
+ !__btree_set_extract_range_done_%out_len
905
+ !__btree_set_extract_range_idx_%out_len
906
+ jmp L_BTREE_SET_EXTRACT_RANGE_HEAD_%out_len
907
+
908
+ L_BTREE_SET_EXTRACT_RANGE_REMOVE_INIT_%out_len:
909
+ call @sa_btree_set_free(^__btree_set_extract_range_snapshot_%out_len)
910
+ __btree_set_extract_range_remove_entries_%out_len = load %out_set+BTreeSet_entries as ptr
911
+ __btree_set_extract_range_remove_len_%out_len = load %out_set+BTreeSet_len as u64
912
+ __btree_set_extract_range_remove_slot_%out_len = stack_alloc 8
913
+ store __btree_set_extract_range_remove_slot_%out_len+0, 0 as u64
914
+ jmp L_BTREE_SET_EXTRACT_RANGE_REMOVE_HEAD_%out_len
915
+
916
+ L_BTREE_SET_EXTRACT_RANGE_REMOVE_HEAD_%out_len:
917
+ __btree_set_extract_range_remove_idx_%out_len = load __btree_set_extract_range_remove_slot_%out_len+0 as u64
918
+ __btree_set_extract_range_remove_done_%out_len = eq __btree_set_extract_range_remove_idx_%out_len, __btree_set_extract_range_remove_len_%out_len
919
+ br __btree_set_extract_range_remove_done_%out_len -> L_BTREE_SET_EXTRACT_RANGE_DONE_%out_len, L_BTREE_SET_EXTRACT_RANGE_REMOVE_BODY_%out_len
920
+
921
+ L_BTREE_SET_EXTRACT_RANGE_REMOVE_BODY_%out_len:
922
+ __btree_set_extract_range_remove_off_%out_len = mul __btree_set_extract_range_remove_idx_%out_len, BTreeMapEntry_SIZE
923
+ __btree_set_extract_range_remove_entry_%out_len = ptr_add __btree_set_extract_range_remove_entries_%out_len, __btree_set_extract_range_remove_off_%out_len
924
+ __btree_set_extract_range_removed_%out_len = call @sa_btree_set_remove(&%set_reg, &__btree_set_extract_range_remove_entry_%out_len)
925
+ __btree_set_extract_range_remove_next_%out_len = add __btree_set_extract_range_remove_idx_%out_len, 1
926
+ store __btree_set_extract_range_remove_slot_%out_len+0, __btree_set_extract_range_remove_next_%out_len as u64
927
+ !__btree_set_extract_range_remove_next_%out_len
928
+ !__btree_set_extract_range_removed_%out_len
929
+ !__btree_set_extract_range_remove_entry_%out_len
930
+ !__btree_set_extract_range_remove_off_%out_len
931
+ !__btree_set_extract_range_remove_done_%out_len
932
+ !__btree_set_extract_range_remove_idx_%out_len
933
+ jmp L_BTREE_SET_EXTRACT_RANGE_REMOVE_HEAD_%out_len
934
+
935
+ L_BTREE_SET_EXTRACT_RANGE_DONE_%out_len:
936
+ %out_len = load %set_reg+BTreeSet_len as u64
937
+ !__btree_set_extract_range_remove_done_%out_len
938
+ !__btree_set_extract_range_remove_idx_%out_len
939
+ !__btree_set_extract_range_remove_len_%out_len
940
+ !__btree_set_extract_range_remove_entries_%out_len
941
+ !__btree_set_extract_range_done_%out_len
942
+ !__btree_set_extract_range_idx_%out_len
943
+ !__btree_set_extract_range_len_%out_len
944
+ !__btree_set_extract_range_entries_%out_len
945
+ [END_MACRO]
946
+
947
+ [MACRO] BTREE_SET_INSERT %out_ok, %set_reg, %key_reg
948
+ %out_ok = call @sa_btree_set_insert(&%set_reg, &%key_reg)
949
+ [END_MACRO]
950
+
951
+ [MACRO] BTREE_SET_REMOVE %out_ok, %set_reg, %key_reg
952
+ %out_ok = call @sa_btree_set_remove(&%set_reg, &%key_reg)
953
+ [END_MACRO]
954
+
955
+ [MACRO] BTREE_SET_TAKE %out_ok, %out_key, %set_reg, %key_reg
956
+ %out_key = alloc Slice_SIZE
957
+ %out_ok = call @sa_btree_set_take(&%set_reg, &%key_reg, &%out_key)
958
+ [END_MACRO]
959
+
960
+ [MACRO] BTREE_SET_REPLACE %out_replaced, %out_old_key, %set_reg, %key_reg
961
+ %out_old_key = alloc Slice_SIZE
962
+ %out_replaced = call @sa_btree_set_replace(&%set_reg, &%key_reg, &%out_old_key)
963
+ [END_MACRO]
964
+
965
+ [MACRO] BTREE_SET_POP_FIRST %out_ok, %out_key, %set_reg
966
+ %out_key = alloc Slice_SIZE
967
+ %out_ok = call @sa_btree_set_pop_first(&%set_reg, &%out_key)
968
+ [END_MACRO]
969
+
970
+ [MACRO] BTREE_SET_POP_LAST %out_ok, %out_key, %set_reg
971
+ %out_key = alloc Slice_SIZE
972
+ %out_ok = call @sa_btree_set_pop_last(&%set_reg, &%out_key)
973
+ [END_MACRO]
974
+
975
+ [MACRO] BTREE_SET_IS_DISJOINT %out_ok, %set_reg, %other_set
976
+ %out_ok = call @sa_btree_set_is_disjoint(&%set_reg, &%other_set)
977
+ [END_MACRO]
978
+
979
+ [MACRO] BTREE_SET_IS_SUBSET %out_ok, %set_reg, %other_set
980
+ %out_ok = call @sa_btree_set_is_subset(&%set_reg, &%other_set)
981
+ [END_MACRO]
982
+
983
+ [MACRO] BTREE_SET_IS_SUPERSET %out_ok, %set_reg, %other_set
984
+ %out_ok = call @sa_btree_set_is_superset(&%set_reg, &%other_set)
985
+ [END_MACRO]
986
+
987
+ [MACRO] BTREE_SET_APPEND %set_reg, %other_set
988
+ call @sa_btree_set_append(&%set_reg, &%other_set)
989
+ [END_MACRO]
990
+
991
+ [MACRO] BTREE_SET_SPLIT_OFF %out_set, %set_reg, %key_reg
992
+ %out_set = call @sa_btree_set_split_off(&%set_reg, &%key_reg)
993
+ [END_MACRO]
994
+
995
+ [MACRO] BTREE_SET_RANGE %out_set, %set_reg, %start_key, %end_key
996
+ %out_set = call @sa_btree_set_range(&%set_reg, &%start_key, &%end_key)
997
+ [END_MACRO]
998
+
999
+ [MACRO] BTREE_SET_UNION %out_set, %set_reg, %other_set
1000
+ %out_set = call @sa_btree_set_union(&%set_reg, &%other_set)
1001
+ [END_MACRO]
1002
+
1003
+ [MACRO] BTREE_SET_INTERSECTION %out_set, %set_reg, %other_set
1004
+ %out_set = call @sa_btree_set_intersection(&%set_reg, &%other_set)
1005
+ [END_MACRO]
1006
+
1007
+ [MACRO] BTREE_SET_DIFFERENCE %out_set, %set_reg, %other_set
1008
+ %out_set = call @sa_btree_set_difference(&%set_reg, &%other_set)
1009
+ [END_MACRO]
1010
+
1011
+ [MACRO] BTREE_SET_SYMMETRIC_DIFFERENCE %out_set, %set_reg, %other_set
1012
+ %out_set = call @sa_btree_set_symmetric_difference(&%set_reg, &%other_set)
1013
+ [END_MACRO]
1014
+
1015
+ [MACRO] BTREE_SET_BITOR %out_set, %set_reg, %other_set
1016
+ EXPAND BTREE_SET_UNION %out_set, %set_reg, %other_set
1017
+ [END_MACRO]
1018
+
1019
+ [MACRO] BTREE_SET_BITAND %out_set, %set_reg, %other_set
1020
+ EXPAND BTREE_SET_INTERSECTION %out_set, %set_reg, %other_set
1021
+ [END_MACRO]
1022
+
1023
+ [MACRO] BTREE_SET_SUB %out_set, %set_reg, %other_set
1024
+ EXPAND BTREE_SET_DIFFERENCE %out_set, %set_reg, %other_set
1025
+ [END_MACRO]
1026
+
1027
+ [MACRO] BTREE_SET_BITXOR %out_set, %set_reg, %other_set
1028
+ EXPAND BTREE_SET_SYMMETRIC_DIFFERENCE %out_set, %set_reg, %other_set
1029
+ [END_MACRO]
1030
+
1031
+ [MACRO] BTREE_SET_ITER %out_vec, %set_reg
1032
+ %out_vec = call @sa_btree_set_iter_vec(&%set_reg)
1033
+ [END_MACRO]
1034
+
1035
+ [MACRO] BTREE_SET_REF_INTO_ITER %out_vec, %set_reg
1036
+ EXPAND BTREE_SET_ITER %out_vec, %set_reg
1037
+ [END_MACRO]
1038
+
1039
+ [MACRO] BTREE_SET_INTO_ITER %out_vec, %set_reg
1040
+ EXPAND BTREE_SET_ITER %out_vec, %set_reg
1041
+ EXPAND BTREE_SET_CLEAR %set_reg
1042
+ [END_MACRO]
1043
+
1044
+ [MACRO] BTREE_SET_LIT1 %out_set, %key1
1045
+ EXPAND BTREE_SET_NEW %out_set
1046
+ EXPAND BTREE_SET_INSERT __btree_set_lit1_ok_1_%out_set, %out_set, %key1
1047
+ !__btree_set_lit1_ok_1_%out_set
1048
+ [END_MACRO]
1049
+
1050
+ [MACRO] BTREE_SET_LIT2 %out_set, %key1, %key2
1051
+ EXPAND BTREE_SET_NEW %out_set
1052
+ EXPAND BTREE_SET_INSERT __btree_set_lit2_ok_1_%out_set, %out_set, %key1
1053
+ EXPAND BTREE_SET_INSERT __btree_set_lit2_ok_2_%out_set, %out_set, %key2
1054
+ !__btree_set_lit2_ok_1_%out_set
1055
+ !__btree_set_lit2_ok_2_%out_set
1056
+ [END_MACRO]
1057
+
1058
+ [MACRO] BTREE_SET_LIT3 %out_set, %key1, %key2, %key3
1059
+ EXPAND BTREE_SET_NEW %out_set
1060
+ EXPAND BTREE_SET_INSERT __btree_set_lit3_ok_1_%out_set, %out_set, %key1
1061
+ EXPAND BTREE_SET_INSERT __btree_set_lit3_ok_2_%out_set, %out_set, %key2
1062
+ EXPAND BTREE_SET_INSERT __btree_set_lit3_ok_3_%out_set, %out_set, %key3
1063
+ !__btree_set_lit3_ok_1_%out_set
1064
+ !__btree_set_lit3_ok_2_%out_set
1065
+ !__btree_set_lit3_ok_3_%out_set
1066
+ [END_MACRO]
1067
+
1068
+ // Rust Default-style empty BTreeSet constructor alias.
1069
+
1070
+ [MACRO] BTREE_SET_DEFAULT %out_set
1071
+ EXPAND BTREE_SET_NEW %out_set
1072
+ [END_MACRO]