@salang/sa 0.1.2 → 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.
- package/bin/sa.js +19 -1
- package/package.json +8 -7
- package/sa_std/alloc/layout.sal +12 -0
- package/sa_std/alloc/prelude.sa +1 -0
- package/sa_std/alloc/prelude.sal +1 -0
- package/sa_std/alloc/string.sa +3 -0
- package/sa_std/alloc/vec.sa +684 -0
- package/sa_std/alloc/vec.sal +4 -0
- package/sa_std/any.sa +130 -0
- package/sa_std/any.sal +23 -0
- package/sa_std/array.sa +1876 -0
- package/sa_std/ascii.sa +2 -0
- package/sa_std/ascii.sal +1 -0
- package/sa_std/async.sla +116 -0
- package/sa_std/binary_heap.sa +3003 -0
- package/sa_std/binary_heap.sal +7 -0
- package/sa_std/borrow.sa +171 -0
- package/sa_std/borrow.sal +13 -0
- package/sa_std/btree_map.sa +2210 -0
- package/sa_std/btree_map.sal +11 -0
- package/sa_std/btree_set.sa +1072 -0
- package/sa_std/btree_set.sal +6 -0
- package/sa_std/char.sa +1309 -0
- package/sa_std/char.sal +50 -0
- package/sa_std/cmp.sa +554 -0
- package/sa_std/cmp.sal +14 -0
- package/sa_std/collections/binary_heap.sa +1 -0
- package/sa_std/collections/btree_map.sa +1 -0
- package/sa_std/collections/btree_set.sa +1 -0
- package/sa_std/collections/hashmap.sa +1 -0
- package/sa_std/collections/hashset.sa +1 -0
- package/sa_std/collections/linked_list.sa +1120 -0
- package/sa_std/collections/linked_list.sal +10 -0
- package/sa_std/collections/prelude.sa +7 -0
- package/sa_std/collections/prelude.sal +1 -0
- package/sa_std/collections/vec_deque.sa +1 -0
- package/sa_std/collections.sal +13 -0
- package/sa_std/convert.sa +1115 -0
- package/sa_std/convert.sal +24 -0
- package/sa_std/core/arc.sa +233 -0
- package/sa_std/core/arc.sal +4 -0
- package/sa_std/core/ascii.sa +784 -0
- package/sa_std/core/ascii.sal +34 -0
- package/sa_std/core/bit.sa +41 -0
- package/sa_std/core/box.sa +1 -0
- package/sa_std/core/box.sal +2 -0
- package/sa_std/core/cell.sa +108 -0
- package/sa_std/core/cell.sal +5 -0
- package/sa_std/core/cleanup.sa +26 -0
- package/sa_std/core/control.sa +20 -0
- package/sa_std/core/derive.sa +60 -0
- package/sa_std/core/derive.sal +1 -0
- package/sa_std/core/dispatch.sa +7 -0
- package/sa_std/core/dispatch.sal +5 -0
- package/sa_std/core/future.sa +777 -0
- package/sa_std/core/future.sal +73 -0
- package/sa_std/core/hash.sa +48 -0
- package/sa_std/core/iter.sa +2805 -0
- package/sa_std/core/iter.sal +4 -0
- package/sa_std/core/loop.sa +60 -0
- package/sa_std/core/mem.sa +220 -0
- package/sa_std/core/option.sa +825 -0
- package/sa_std/core/option.sal +11 -0
- package/sa_std/core/panic.sa +23 -0
- package/sa_std/core/panic.sal +12 -0
- package/sa_std/core/prelude.sa +18 -0
- package/sa_std/core/prelude.sal +18 -0
- package/sa_std/core/rc.sa +225 -0
- package/sa_std/core/rc.sal +4 -0
- package/sa_std/core/refcell.sa +283 -0
- package/sa_std/core/refcell.sal +13 -0
- package/sa_std/core/result.sa +708 -0
- package/sa_std/core/result.sal +6 -0
- package/sa_std/core/rust_patterns.sal +295 -0
- package/sa_std/core/sa_core.sa +84 -0
- package/sa_std/core/slice.sa +4021 -0
- package/sa_std/core/slice.sal +7 -0
- package/sa_std/core/task.sa +112 -0
- package/sa_std/core/task.sal +15 -0
- package/sa_std/core/trait_object.sa +26 -0
- package/sa_std/core/trait_object.sal +4 -0
- package/sa_std/core/waker.sa +289 -0
- package/sa_std/core/waker.sal +31 -0
- package/sa_std/core/weak.sa +2 -0
- package/sa_std/core/weak.sal +4 -0
- package/sa_std/cow.sa +3 -0
- package/sa_std/cow.sal +2 -0
- package/sa_std/cstring.sa +3 -0
- package/sa_std/cstring.sal +2 -0
- package/sa_std/default.sa +99 -0
- package/sa_std/duration.sa +3 -0
- package/sa_std/duration.sal +2 -0
- package/sa_std/encoding/json.sa +259 -0
- package/sa_std/encoding/json.sai +54 -0
- package/sa_std/encoding/json.sal +35 -0
- package/sa_std/encoding/prelude.sa +1 -0
- package/sa_std/encoding/prelude.sal +0 -0
- package/sa_std/env.sa +390 -0
- package/sa_std/env.sai +25 -0
- package/sa_std/error.sa +253 -0
- package/sa_std/error.sal +44 -0
- package/sa_std/ffi/cstring.sa +3 -0
- package/sa_std/ffi/cstring.sal +1 -0
- package/sa_std/ffi/prelude.sa +2 -0
- package/sa_std/ffi/prelude.sal +2 -0
- package/sa_std/ffi.sa +635 -0
- package/sa_std/ffi.sal +51 -0
- package/sa_std/fmt.sa +2 -0
- package/sa_std/fmt.sai +18 -0
- package/sa_std/fmt.sal +35 -0
- package/sa_std/fs.sa +1023 -0
- package/sa_std/fs.sai +127 -0
- package/sa_std/fs.sal +51 -0
- package/sa_std/future.sa +2 -0
- package/sa_std/future.sal +1 -0
- package/sa_std/hash.sa +1486 -0
- package/sa_std/hash.sal +13 -0
- package/sa_std/hashmap.sa +1962 -0
- package/sa_std/hashmap.sal +20 -0
- package/sa_std/hashset.sa +1004 -0
- package/sa_std/hashset.sal +18 -0
- package/sa_std/http2.sa +78 -0
- package/sa_std/http2.sai +26 -0
- package/sa_std/http2.sal +36 -0
- package/sa_std/instant.sa +3 -0
- package/sa_std/instant.sal +2 -0
- package/sa_std/io/buf_reader.sa +43 -0
- package/sa_std/io/buf_writer.sa +35 -0
- package/sa_std/io/bufio.sa +4 -0
- package/sa_std/io/bufio.sal +4 -0
- package/sa_std/io/prelude.sa +1 -0
- package/sa_std/io/prelude.sal +1 -0
- package/sa_std/io/print.sa +2 -0
- package/sa_std/io/print.sai +3 -0
- package/sa_std/io.sa +925 -0
- package/sa_std/io.sai +25 -0
- package/sa_std/io.sal +84 -0
- package/sa_std/iter.sa +2 -0
- package/sa_std/iter.sal +1 -0
- package/sa_std/join_handle.sa +3 -0
- package/sa_std/join_handle.sal +2 -0
- package/sa_std/libsa_async.sa +80 -0
- package/sa_std/m_async.sa +137 -0
- package/sa_std/m_async.sal +30 -0
- package/sa_std/m_async.sla +2 -0
- package/sa_std/manually_drop.sa +3 -0
- package/sa_std/manually_drop.sal +2 -0
- package/sa_std/marker/phantom_data.sa +3 -0
- package/sa_std/marker/phantom_data.sal +1 -0
- package/sa_std/marker/prelude.sa +4 -0
- package/sa_std/marker/prelude.sal +4 -0
- package/sa_std/marker.sa +220 -0
- package/sa_std/marker.sal +15 -0
- package/sa_std/math.sa +84 -0
- package/sa_std/math.sai +10 -0
- package/sa_std/mem/manually_drop.sa +3 -0
- package/sa_std/mem/manually_drop.sal +1 -0
- package/sa_std/mem/prelude.sa +2 -0
- package/sa_std/mem/prelude.sal +2 -0
- package/sa_std/mem.sa +564 -0
- package/sa_std/mem.sal +40 -0
- package/sa_std/modstate.sai +19 -0
- package/sa_std/net.sa +4227 -0
- package/sa_std/net.sai +239 -0
- package/sa_std/net.sal +159 -0
- package/sa_std/netx.sa +85 -0
- package/sa_std/netx.sai +11 -0
- package/sa_std/netx.sal +39 -0
- package/sa_std/nonzero.sa +3 -0
- package/sa_std/nonzero.sal +2 -0
- package/sa_std/num/nonzero.sa +3 -0
- package/sa_std/num/nonzero.sal +1 -0
- package/sa_std/num/prelude.sa +3 -0
- package/sa_std/num/prelude.sal +3 -0
- package/sa_std/num.sa +17302 -0
- package/sa_std/num.sai +11 -0
- package/sa_std/num.sal +341 -0
- package/sa_std/ops.sa +1884 -0
- package/sa_std/ops.sal +68 -0
- package/sa_std/option.sa +2 -0
- package/sa_std/option.sal +1 -0
- package/sa_std/os/fd.sa +96 -0
- package/sa_std/os/fd.sai +7 -0
- package/sa_std/os/fd.sal +11 -0
- package/sa_std/os/prelude.sa +2 -0
- package/sa_std/os/prelude.sal +1 -0
- package/sa_std/os/unix_ffi.sa +271 -0
- package/sa_std/panic.sa +1 -0
- package/sa_std/panic.sal +1 -0
- package/sa_std/path.sa +3170 -0
- package/sa_std/path.sal +12 -0
- package/sa_std/phantom_data.sa +3 -0
- package/sa_std/phantom_data.sal +2 -0
- package/sa_std/pin.sa +79 -0
- package/sa_std/pin.sal +5 -0
- package/sa_std/plugin_async.sa +90 -0
- package/sa_std/plugin_async.sal +29 -0
- package/sa_std/plugin_async.sla +4 -0
- package/sa_std/plugin_http_async.sa +46 -0
- package/sa_std/plugin_http_server.sa +61 -0
- package/sa_std/plugin_http_server.sla +2 -0
- package/sa_std/plugin_sqlite.sa +106 -0
- package/sa_std/plugin_sqlite.sla +2 -0
- package/sa_std/prelude.sa +60 -0
- package/sa_std/prelude.sal +55 -0
- package/sa_std/process.sa +916 -0
- package/sa_std/process.sai +57 -0
- package/sa_std/process.sal +27 -0
- package/sa_std/ptr.sa +503 -0
- package/sa_std/ptr.sal +2 -0
- package/sa_std/result.sa +2 -0
- package/sa_std/result.sal +1 -0
- package/sa_std/rust_core.sa +51 -0
- package/sa_std/rust_core.sal +26 -0
- package/sa_std/sa.mod +7 -0
- package/sa_std/sort.sa +156 -0
- package/sa_std/str.sla +13 -0
- package/sa_std/string.sa +12240 -0
- package/sa_std/string.sai +25 -0
- package/sa_std/string.sal +17 -0
- package/sa_std/string_format.sa +269 -0
- package/sa_std/sync/atomic.sa +1500 -0
- package/sa_std/sync/atomic.sal +45 -0
- package/sa_std/sync/barrier.sa +105 -0
- package/sa_std/sync/barrier.sal +7 -0
- package/sa_std/sync/condvar.sa +240 -0
- package/sa_std/sync/condvar.sal +4 -0
- package/sa_std/sync/mpsc.sa +758 -0
- package/sa_std/sync/mpsc.sal +42 -0
- package/sa_std/sync/mpsc_list.sa +255 -0
- package/sa_std/sync/mpsc_list.sal +3 -0
- package/sa_std/sync/mutex.sa +182 -0
- package/sa_std/sync/mutex.sal +7 -0
- package/sa_std/sync/once.sa +371 -0
- package/sa_std/sync/once.sal +31 -0
- package/sa_std/sync/poison.sa +36 -0
- package/sa_std/sync/poison.sal +11 -0
- package/sa_std/sync/prelude.sa +8 -0
- package/sa_std/sync/prelude.sal +7 -0
- package/sa_std/sync/rwlock.sa +369 -0
- package/sa_std/sync/rwlock.sal +13 -0
- package/sa_std/task.sa +2 -0
- package/sa_std/task.sal +1 -0
- package/sa_std/term.sa +2 -0
- package/sa_std/term.sai +10 -0
- package/sa_std/term.sal +33 -0
- package/sa_std/testing/assert.sai +4 -0
- package/sa_std/testing/mock_io.sa +174 -0
- package/sa_std/testing/mock_io.sal +5 -0
- package/sa_std/testing/prelude.sa +2 -0
- package/sa_std/testing/prelude.sal +1 -0
- package/sa_std/text/prelude.sa +1 -0
- package/sa_std/text/prelude.sal +1 -0
- package/sa_std/text/regex.sa +2 -0
- package/sa_std/text/regex.sai +9 -0
- package/sa_std/text/regex.sal +33 -0
- package/sa_std/thread/join_handle.sa +3 -0
- package/sa_std/thread/join_handle.sal +1 -0
- package/sa_std/thread/prelude.sa +4 -0
- package/sa_std/thread/prelude.sal +3 -0
- package/sa_std/thread.sa +160 -0
- package/sa_std/thread.sai +11 -0
- package/sa_std/thread.sal +4 -0
- package/sa_std/thread_local.sa +45 -0
- package/sa_std/thread_local.sai +9 -0
- package/sa_std/time/duration.sa +3 -0
- package/sa_std/time/duration.sal +1 -0
- package/sa_std/time/instant.sa +3 -0
- package/sa_std/time/instant.sal +1 -0
- package/sa_std/time/prelude.sa +4 -0
- package/sa_std/time/prelude.sal +4 -0
- package/sa_std/time.sa +850 -0
- package/sa_std/time.sai +37 -0
- package/sa_std/time.sal +35 -0
- package/sa_std/time.sla +67 -0
- package/sa_std/tls_client.sai +39 -0
- package/sa_std/vec.sa +5754 -0
- package/sa_std/vec.sal +1 -0
- package/sa_std/vec_deque.sa +4925 -0
- package/sa_std/vec_deque.sal +8 -0
- package/sa_std/vec_runtime_macros.sa +11 -0
- package/sa_std/ws_client.sai +57 -0
|
@@ -0,0 +1,1004 @@
|
|
|
1
|
+
@import "hashset.sal"
|
|
2
|
+
@import "hashmap.sa"
|
|
3
|
+
@import "core/slice.sal"
|
|
4
|
+
@import "alloc/vec.sal"
|
|
5
|
+
@import "vec.sa"
|
|
6
|
+
@import "num.sa"
|
|
7
|
+
|
|
8
|
+
@const HASHSET_SENTINEL = utf8:"hashset"
|
|
9
|
+
|
|
10
|
+
@set_insert_all(&dst: ptr, &src: ptr) -> void:
|
|
11
|
+
L_ENTRY:
|
|
12
|
+
slots = load src+HashSet_slots as ptr
|
|
13
|
+
cap = load src+HashSet_cap as u64
|
|
14
|
+
idx_slot = stack_alloc 8
|
|
15
|
+
store idx_slot+0, 0 as u64
|
|
16
|
+
jmp L_INSERT_ALL_HEAD
|
|
17
|
+
|
|
18
|
+
L_INSERT_ALL_HEAD:
|
|
19
|
+
idx = load idx_slot+0 as u64
|
|
20
|
+
done = eq idx, cap
|
|
21
|
+
br done -> L_INSERT_ALL_DONE, L_INSERT_ALL_BODY
|
|
22
|
+
|
|
23
|
+
L_INSERT_ALL_BODY:
|
|
24
|
+
slot_off = mul idx, HashSetSlot_SIZE
|
|
25
|
+
slot = ptr_add slots, slot_off
|
|
26
|
+
state = load slot+HashSetSlot_state as u8
|
|
27
|
+
filled = eq state, HashSet_STATE_FILLED
|
|
28
|
+
br filled -> L_INSERT_ALL_KEY, L_INSERT_ALL_NEXT
|
|
29
|
+
|
|
30
|
+
L_INSERT_ALL_KEY:
|
|
31
|
+
key = load slot+HashSetSlot_key as ptr
|
|
32
|
+
inserted = call @sa_set_insert(&dst, &key)
|
|
33
|
+
!inserted
|
|
34
|
+
!key
|
|
35
|
+
jmp L_INSERT_ALL_NEXT
|
|
36
|
+
|
|
37
|
+
L_INSERT_ALL_NEXT:
|
|
38
|
+
next_idx = add idx, 1
|
|
39
|
+
store idx_slot+0, next_idx as u64
|
|
40
|
+
!next_idx
|
|
41
|
+
!filled
|
|
42
|
+
!state
|
|
43
|
+
!slot
|
|
44
|
+
!slot_off
|
|
45
|
+
!done
|
|
46
|
+
!idx
|
|
47
|
+
jmp L_INSERT_ALL_HEAD
|
|
48
|
+
|
|
49
|
+
L_INSERT_ALL_DONE:
|
|
50
|
+
!done
|
|
51
|
+
!idx
|
|
52
|
+
!cap
|
|
53
|
+
!slots
|
|
54
|
+
!src
|
|
55
|
+
!dst
|
|
56
|
+
return
|
|
57
|
+
|
|
58
|
+
@set_insert_intersection(&dst: ptr, &src: ptr, &other: ptr) -> void:
|
|
59
|
+
L_ENTRY:
|
|
60
|
+
slots = load src+HashSet_slots as ptr
|
|
61
|
+
cap = load src+HashSet_cap as u64
|
|
62
|
+
idx_slot = stack_alloc 8
|
|
63
|
+
store idx_slot+0, 0 as u64
|
|
64
|
+
jmp L_INSERT_INTERSECTION_HEAD
|
|
65
|
+
|
|
66
|
+
L_INSERT_INTERSECTION_HEAD:
|
|
67
|
+
idx = load idx_slot+0 as u64
|
|
68
|
+
done = eq idx, cap
|
|
69
|
+
br done -> L_INSERT_INTERSECTION_DONE, L_INSERT_INTERSECTION_BODY
|
|
70
|
+
|
|
71
|
+
L_INSERT_INTERSECTION_BODY:
|
|
72
|
+
slot_off = mul idx, HashSetSlot_SIZE
|
|
73
|
+
slot = ptr_add slots, slot_off
|
|
74
|
+
state = load slot+HashSetSlot_state as u8
|
|
75
|
+
filled = eq state, HashSet_STATE_FILLED
|
|
76
|
+
br filled -> L_INSERT_INTERSECTION_KEY, L_INSERT_INTERSECTION_NEXT
|
|
77
|
+
|
|
78
|
+
L_INSERT_INTERSECTION_KEY:
|
|
79
|
+
key = load slot+HashSetSlot_key as ptr
|
|
80
|
+
contains = call @sa_set_contains(&other, &key)
|
|
81
|
+
keep = ne contains, 0
|
|
82
|
+
br keep -> L_INSERT_INTERSECTION_KEEP, L_INSERT_INTERSECTION_SKIP
|
|
83
|
+
|
|
84
|
+
L_INSERT_INTERSECTION_KEEP:
|
|
85
|
+
inserted = call @sa_set_insert(&dst, &key)
|
|
86
|
+
!inserted
|
|
87
|
+
!keep
|
|
88
|
+
!contains
|
|
89
|
+
!key
|
|
90
|
+
jmp L_INSERT_INTERSECTION_NEXT
|
|
91
|
+
|
|
92
|
+
L_INSERT_INTERSECTION_SKIP:
|
|
93
|
+
!keep
|
|
94
|
+
!contains
|
|
95
|
+
!key
|
|
96
|
+
jmp L_INSERT_INTERSECTION_NEXT
|
|
97
|
+
|
|
98
|
+
L_INSERT_INTERSECTION_NEXT:
|
|
99
|
+
next_idx = add idx, 1
|
|
100
|
+
store idx_slot+0, next_idx as u64
|
|
101
|
+
!next_idx
|
|
102
|
+
!filled
|
|
103
|
+
!state
|
|
104
|
+
!slot
|
|
105
|
+
!slot_off
|
|
106
|
+
!done
|
|
107
|
+
!idx
|
|
108
|
+
jmp L_INSERT_INTERSECTION_HEAD
|
|
109
|
+
|
|
110
|
+
L_INSERT_INTERSECTION_DONE:
|
|
111
|
+
!done
|
|
112
|
+
!idx
|
|
113
|
+
!cap
|
|
114
|
+
!slots
|
|
115
|
+
!other
|
|
116
|
+
!src
|
|
117
|
+
!dst
|
|
118
|
+
return
|
|
119
|
+
|
|
120
|
+
@set_insert_difference(&dst: ptr, &src: ptr, &other: ptr) -> void:
|
|
121
|
+
L_ENTRY:
|
|
122
|
+
slots = load src+HashSet_slots as ptr
|
|
123
|
+
cap = load src+HashSet_cap as u64
|
|
124
|
+
idx_slot = stack_alloc 8
|
|
125
|
+
store idx_slot+0, 0 as u64
|
|
126
|
+
jmp L_INSERT_DIFFERENCE_HEAD
|
|
127
|
+
|
|
128
|
+
L_INSERT_DIFFERENCE_HEAD:
|
|
129
|
+
idx = load idx_slot+0 as u64
|
|
130
|
+
done = eq idx, cap
|
|
131
|
+
br done -> L_INSERT_DIFFERENCE_DONE, L_INSERT_DIFFERENCE_BODY
|
|
132
|
+
|
|
133
|
+
L_INSERT_DIFFERENCE_BODY:
|
|
134
|
+
slot_off = mul idx, HashSetSlot_SIZE
|
|
135
|
+
slot = ptr_add slots, slot_off
|
|
136
|
+
state = load slot+HashSetSlot_state as u8
|
|
137
|
+
filled = eq state, HashSet_STATE_FILLED
|
|
138
|
+
br filled -> L_INSERT_DIFFERENCE_KEY, L_INSERT_DIFFERENCE_NEXT
|
|
139
|
+
|
|
140
|
+
L_INSERT_DIFFERENCE_KEY:
|
|
141
|
+
key = load slot+HashSetSlot_key as ptr
|
|
142
|
+
contains = call @sa_set_contains(&other, &key)
|
|
143
|
+
keep = eq contains, 0
|
|
144
|
+
br keep -> L_INSERT_DIFFERENCE_KEEP, L_INSERT_DIFFERENCE_SKIP
|
|
145
|
+
|
|
146
|
+
L_INSERT_DIFFERENCE_KEEP:
|
|
147
|
+
inserted = call @sa_set_insert(&dst, &key)
|
|
148
|
+
!inserted
|
|
149
|
+
!keep
|
|
150
|
+
!contains
|
|
151
|
+
!key
|
|
152
|
+
jmp L_INSERT_DIFFERENCE_NEXT
|
|
153
|
+
|
|
154
|
+
L_INSERT_DIFFERENCE_SKIP:
|
|
155
|
+
!keep
|
|
156
|
+
!contains
|
|
157
|
+
!key
|
|
158
|
+
jmp L_INSERT_DIFFERENCE_NEXT
|
|
159
|
+
|
|
160
|
+
L_INSERT_DIFFERENCE_NEXT:
|
|
161
|
+
next_idx = add idx, 1
|
|
162
|
+
store idx_slot+0, next_idx as u64
|
|
163
|
+
!next_idx
|
|
164
|
+
!filled
|
|
165
|
+
!state
|
|
166
|
+
!slot
|
|
167
|
+
!slot_off
|
|
168
|
+
!done
|
|
169
|
+
!idx
|
|
170
|
+
jmp L_INSERT_DIFFERENCE_HEAD
|
|
171
|
+
|
|
172
|
+
L_INSERT_DIFFERENCE_DONE:
|
|
173
|
+
!done
|
|
174
|
+
!idx
|
|
175
|
+
!cap
|
|
176
|
+
!slots
|
|
177
|
+
!other
|
|
178
|
+
!src
|
|
179
|
+
!dst
|
|
180
|
+
return
|
|
181
|
+
|
|
182
|
+
@export sa_set_new() -> ^ptr:
|
|
183
|
+
L_ENTRY:
|
|
184
|
+
set = call @sa_map_new()
|
|
185
|
+
return set
|
|
186
|
+
|
|
187
|
+
@export sa_set_with_capacity(cap: u64) -> ^ptr:
|
|
188
|
+
L_ENTRY:
|
|
189
|
+
set = call @sa_map_with_capacity(cap)
|
|
190
|
+
!cap
|
|
191
|
+
return set
|
|
192
|
+
|
|
193
|
+
@export sa_set_try_with_capacity(cap: u64, &out_set_slot: ptr) -> i32:
|
|
194
|
+
L_ENTRY:
|
|
195
|
+
set = call @sa_set_with_capacity(cap)
|
|
196
|
+
store out_set_slot+0, set as ptr
|
|
197
|
+
!set
|
|
198
|
+
!out_set_slot
|
|
199
|
+
!cap
|
|
200
|
+
return 1
|
|
201
|
+
|
|
202
|
+
@export sa_set_len(&set: ptr) -> u64:
|
|
203
|
+
L_ENTRY:
|
|
204
|
+
len = load set+HashSet_len as u64
|
|
205
|
+
!set
|
|
206
|
+
return len
|
|
207
|
+
|
|
208
|
+
@export sa_set_capacity(&set: ptr) -> u64:
|
|
209
|
+
L_ENTRY:
|
|
210
|
+
cap = load set+HashSet_cap as u64
|
|
211
|
+
!set
|
|
212
|
+
return cap
|
|
213
|
+
|
|
214
|
+
@export sa_set_reserve(&set: ptr, additional: u64) -> void:
|
|
215
|
+
L_ENTRY:
|
|
216
|
+
call @sa_map_reserve(&set, additional)
|
|
217
|
+
!additional
|
|
218
|
+
!set
|
|
219
|
+
return
|
|
220
|
+
|
|
221
|
+
@export sa_set_try_reserve(&set: ptr, additional: u64) -> i32:
|
|
222
|
+
L_ENTRY:
|
|
223
|
+
ok = call @sa_map_try_reserve(&set, additional)
|
|
224
|
+
!additional
|
|
225
|
+
!set
|
|
226
|
+
return ok
|
|
227
|
+
|
|
228
|
+
@export sa_set_shrink_to(&set: ptr, min_capacity: u64) -> void:
|
|
229
|
+
L_ENTRY:
|
|
230
|
+
call @sa_map_shrink_to(&set, min_capacity)
|
|
231
|
+
!min_capacity
|
|
232
|
+
!set
|
|
233
|
+
return
|
|
234
|
+
|
|
235
|
+
@export sa_set_shrink_to_fit(&set: ptr) -> void:
|
|
236
|
+
L_ENTRY:
|
|
237
|
+
call @sa_map_shrink_to_fit(&set)
|
|
238
|
+
!set
|
|
239
|
+
return
|
|
240
|
+
|
|
241
|
+
@export sa_set_is_empty(&set: ptr) -> i32:
|
|
242
|
+
L_ENTRY:
|
|
243
|
+
len = load set+HashSet_len as u64
|
|
244
|
+
empty = eq len, 0
|
|
245
|
+
result = empty as i32
|
|
246
|
+
!len
|
|
247
|
+
!set
|
|
248
|
+
return result
|
|
249
|
+
|
|
250
|
+
@export sa_set_clear(&set: ptr) -> void:
|
|
251
|
+
L_ENTRY:
|
|
252
|
+
call @sa_map_clear(&set)
|
|
253
|
+
!set
|
|
254
|
+
return
|
|
255
|
+
|
|
256
|
+
@export sa_set_free(^set: ptr) -> void:
|
|
257
|
+
L_ENTRY:
|
|
258
|
+
call @sa_map_free(^set)
|
|
259
|
+
return
|
|
260
|
+
|
|
261
|
+
@export sa_set_insert(&set: ptr, &key: ptr) -> i32:
|
|
262
|
+
L_ENTRY:
|
|
263
|
+
len_before = load set+HashSet_len as u64
|
|
264
|
+
sentinel = &HASHSET_SENTINEL
|
|
265
|
+
call @sa_map_put(&set, &key, &sentinel)
|
|
266
|
+
len_after = load set+HashSet_len as u64
|
|
267
|
+
is_new = ne len_after, len_before
|
|
268
|
+
result = is_new as i32
|
|
269
|
+
!sentinel
|
|
270
|
+
!len_after
|
|
271
|
+
!len_before
|
|
272
|
+
!key
|
|
273
|
+
!set
|
|
274
|
+
return result
|
|
275
|
+
|
|
276
|
+
@export sa_set_contains(&set: ptr, &key: ptr) -> i32:
|
|
277
|
+
L_ENTRY:
|
|
278
|
+
existing = call @sa_map_get(&set, &key)
|
|
279
|
+
found = ne existing, 0
|
|
280
|
+
result = found as i32
|
|
281
|
+
!existing
|
|
282
|
+
!key
|
|
283
|
+
!set
|
|
284
|
+
return result
|
|
285
|
+
|
|
286
|
+
@export sa_set_get(&set: ptr, &key: ptr, &out_key_slot: ptr) -> i32:
|
|
287
|
+
L_ENTRY:
|
|
288
|
+
value_slot = stack_alloc 8
|
|
289
|
+
found = call @sa_map_try_get_key_value(&set, &key, &out_key_slot, &value_slot)
|
|
290
|
+
!out_key_slot
|
|
291
|
+
!key
|
|
292
|
+
!set
|
|
293
|
+
return found
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
@export sa_set_take(&set: ptr, &key: ptr, &out_key_slot: ptr) -> i32:
|
|
297
|
+
L_ENTRY:
|
|
298
|
+
value_slot = stack_alloc 8
|
|
299
|
+
found = call @sa_map_remove_entry(&set, &key, &out_key_slot, &value_slot)
|
|
300
|
+
!out_key_slot
|
|
301
|
+
!key
|
|
302
|
+
!set
|
|
303
|
+
return found
|
|
304
|
+
|
|
305
|
+
@export sa_set_replace(&set: ptr, &key: ptr, &out_old_key_slot: ptr) -> i32:
|
|
306
|
+
L_ENTRY:
|
|
307
|
+
removed = call @sa_set_take(&set, &key, &out_old_key_slot)
|
|
308
|
+
sentinel = &HASHSET_SENTINEL
|
|
309
|
+
call @sa_map_put(&set, &key, &sentinel)
|
|
310
|
+
!sentinel
|
|
311
|
+
!out_old_key_slot
|
|
312
|
+
!key
|
|
313
|
+
!set
|
|
314
|
+
return removed
|
|
315
|
+
|
|
316
|
+
@export sa_set_is_subset(&set: ptr, &other: ptr) -> i32:
|
|
317
|
+
L_ENTRY:
|
|
318
|
+
len = load set+HashSet_len as u64
|
|
319
|
+
other_len = load other+HashSet_len as u64
|
|
320
|
+
too_large = ugt len, other_len
|
|
321
|
+
br too_large -> L_SUBSET_FALSE_FAST, L_SUBSET_SCAN_INIT
|
|
322
|
+
|
|
323
|
+
L_SUBSET_SCAN_INIT:
|
|
324
|
+
slots = load set+HashSet_slots as ptr
|
|
325
|
+
cap = load set+HashSet_cap as u64
|
|
326
|
+
idx_slot = stack_alloc 8
|
|
327
|
+
store idx_slot+0, 0 as u64
|
|
328
|
+
jmp L_SUBSET_SCAN_HEAD
|
|
329
|
+
|
|
330
|
+
L_SUBSET_SCAN_HEAD:
|
|
331
|
+
idx = load idx_slot+0 as u64
|
|
332
|
+
done = eq idx, cap
|
|
333
|
+
br done -> L_SUBSET_TRUE, L_SUBSET_SCAN_BODY
|
|
334
|
+
|
|
335
|
+
L_SUBSET_SCAN_BODY:
|
|
336
|
+
slot_off = mul idx, HashSetSlot_SIZE
|
|
337
|
+
slot = ptr_add slots, slot_off
|
|
338
|
+
state = load slot+HashSetSlot_state as u8
|
|
339
|
+
filled = eq state, HashSet_STATE_FILLED
|
|
340
|
+
br filled -> L_SUBSET_CHECK_KEY, L_SUBSET_NEXT
|
|
341
|
+
|
|
342
|
+
L_SUBSET_CHECK_KEY:
|
|
343
|
+
key = load slot+HashSetSlot_key as ptr
|
|
344
|
+
contains = call @sa_set_contains(&other, &key)
|
|
345
|
+
has_key = ne contains, 0
|
|
346
|
+
br has_key -> L_SUBSET_KEY_OK, L_SUBSET_FALSE
|
|
347
|
+
|
|
348
|
+
L_SUBSET_KEY_OK:
|
|
349
|
+
!has_key
|
|
350
|
+
!contains
|
|
351
|
+
!key
|
|
352
|
+
jmp L_SUBSET_NEXT
|
|
353
|
+
|
|
354
|
+
L_SUBSET_NEXT:
|
|
355
|
+
next_idx = add idx, 1
|
|
356
|
+
store idx_slot+0, next_idx as u64
|
|
357
|
+
!next_idx
|
|
358
|
+
!filled
|
|
359
|
+
!state
|
|
360
|
+
!slot
|
|
361
|
+
!slot_off
|
|
362
|
+
!done
|
|
363
|
+
!idx
|
|
364
|
+
jmp L_SUBSET_SCAN_HEAD
|
|
365
|
+
|
|
366
|
+
L_SUBSET_TRUE:
|
|
367
|
+
!done
|
|
368
|
+
!idx
|
|
369
|
+
!cap
|
|
370
|
+
!slots
|
|
371
|
+
!too_large
|
|
372
|
+
!other_len
|
|
373
|
+
!len
|
|
374
|
+
!other
|
|
375
|
+
!set
|
|
376
|
+
return 1
|
|
377
|
+
|
|
378
|
+
L_SUBSET_FALSE:
|
|
379
|
+
!has_key
|
|
380
|
+
!contains
|
|
381
|
+
!key
|
|
382
|
+
!filled
|
|
383
|
+
!state
|
|
384
|
+
!slot
|
|
385
|
+
!slot_off
|
|
386
|
+
!done
|
|
387
|
+
!idx
|
|
388
|
+
!cap
|
|
389
|
+
!slots
|
|
390
|
+
!too_large
|
|
391
|
+
!other_len
|
|
392
|
+
!len
|
|
393
|
+
!other
|
|
394
|
+
!set
|
|
395
|
+
return 0
|
|
396
|
+
|
|
397
|
+
L_SUBSET_FALSE_FAST:
|
|
398
|
+
!too_large
|
|
399
|
+
!other_len
|
|
400
|
+
!len
|
|
401
|
+
!other
|
|
402
|
+
!set
|
|
403
|
+
return 0
|
|
404
|
+
|
|
405
|
+
@export sa_set_is_superset(&set: ptr, &other: ptr) -> i32:
|
|
406
|
+
L_ENTRY:
|
|
407
|
+
result = call @sa_set_is_subset(&other, &set)
|
|
408
|
+
!other
|
|
409
|
+
!set
|
|
410
|
+
return result
|
|
411
|
+
|
|
412
|
+
@export sa_set_is_disjoint(&set: ptr, &other: ptr) -> i32:
|
|
413
|
+
L_ENTRY:
|
|
414
|
+
slots = load set+HashSet_slots as ptr
|
|
415
|
+
cap = load set+HashSet_cap as u64
|
|
416
|
+
idx_slot = stack_alloc 8
|
|
417
|
+
store idx_slot+0, 0 as u64
|
|
418
|
+
jmp L_DISJOINT_SCAN_HEAD
|
|
419
|
+
|
|
420
|
+
L_DISJOINT_SCAN_HEAD:
|
|
421
|
+
idx = load idx_slot+0 as u64
|
|
422
|
+
done = eq idx, cap
|
|
423
|
+
br done -> L_DISJOINT_TRUE, L_DISJOINT_SCAN_BODY
|
|
424
|
+
|
|
425
|
+
L_DISJOINT_SCAN_BODY:
|
|
426
|
+
slot_off = mul idx, HashSetSlot_SIZE
|
|
427
|
+
slot = ptr_add slots, slot_off
|
|
428
|
+
state = load slot+HashSetSlot_state as u8
|
|
429
|
+
filled = eq state, HashSet_STATE_FILLED
|
|
430
|
+
br filled -> L_DISJOINT_CHECK_KEY, L_DISJOINT_NEXT
|
|
431
|
+
|
|
432
|
+
L_DISJOINT_CHECK_KEY:
|
|
433
|
+
key = load slot+HashSetSlot_key as ptr
|
|
434
|
+
contains = call @sa_set_contains(&other, &key)
|
|
435
|
+
overlaps = ne contains, 0
|
|
436
|
+
br overlaps -> L_DISJOINT_FALSE, L_DISJOINT_KEY_OK
|
|
437
|
+
|
|
438
|
+
L_DISJOINT_KEY_OK:
|
|
439
|
+
!overlaps
|
|
440
|
+
!contains
|
|
441
|
+
!key
|
|
442
|
+
jmp L_DISJOINT_NEXT
|
|
443
|
+
|
|
444
|
+
L_DISJOINT_NEXT:
|
|
445
|
+
next_idx = add idx, 1
|
|
446
|
+
store idx_slot+0, next_idx as u64
|
|
447
|
+
!next_idx
|
|
448
|
+
!filled
|
|
449
|
+
!state
|
|
450
|
+
!slot
|
|
451
|
+
!slot_off
|
|
452
|
+
!done
|
|
453
|
+
!idx
|
|
454
|
+
jmp L_DISJOINT_SCAN_HEAD
|
|
455
|
+
|
|
456
|
+
L_DISJOINT_TRUE:
|
|
457
|
+
!done
|
|
458
|
+
!idx
|
|
459
|
+
!cap
|
|
460
|
+
!slots
|
|
461
|
+
!other
|
|
462
|
+
!set
|
|
463
|
+
return 1
|
|
464
|
+
|
|
465
|
+
L_DISJOINT_FALSE:
|
|
466
|
+
!overlaps
|
|
467
|
+
!contains
|
|
468
|
+
!key
|
|
469
|
+
!filled
|
|
470
|
+
!state
|
|
471
|
+
!slot
|
|
472
|
+
!slot_off
|
|
473
|
+
!done
|
|
474
|
+
!idx
|
|
475
|
+
!cap
|
|
476
|
+
!slots
|
|
477
|
+
!other
|
|
478
|
+
!set
|
|
479
|
+
return 0
|
|
480
|
+
|
|
481
|
+
@export sa_set_remove(&set: ptr, &key: ptr) -> i32:
|
|
482
|
+
L_ENTRY:
|
|
483
|
+
len_before = load set+HashSet_len as u64
|
|
484
|
+
removed = call @sa_map_del(&set, &key)
|
|
485
|
+
len_after = load set+HashSet_len as u64
|
|
486
|
+
is_found = ne len_after, len_before
|
|
487
|
+
result = is_found as i32
|
|
488
|
+
!removed
|
|
489
|
+
!len_after
|
|
490
|
+
!len_before
|
|
491
|
+
!key
|
|
492
|
+
!set
|
|
493
|
+
return result
|
|
494
|
+
|
|
495
|
+
@export sa_set_union(&set: ptr, &other: ptr) -> ^ptr:
|
|
496
|
+
L_ENTRY:
|
|
497
|
+
len = load set+HashSet_len as u64
|
|
498
|
+
other_len = load other+HashSet_len as u64
|
|
499
|
+
cap_hint = add len, other_len
|
|
500
|
+
out_set = call @sa_set_with_capacity(cap_hint)
|
|
501
|
+
call @set_insert_all(&out_set, &set)
|
|
502
|
+
call @set_insert_all(&out_set, &other)
|
|
503
|
+
!cap_hint
|
|
504
|
+
!other_len
|
|
505
|
+
!len
|
|
506
|
+
!other
|
|
507
|
+
!set
|
|
508
|
+
return out_set
|
|
509
|
+
|
|
510
|
+
@export sa_set_intersection(&set: ptr, &other: ptr) -> ^ptr:
|
|
511
|
+
L_ENTRY:
|
|
512
|
+
len = load set+HashSet_len as u64
|
|
513
|
+
other_len = load other+HashSet_len as u64
|
|
514
|
+
left_smaller = ule len, other_len
|
|
515
|
+
br left_smaller -> L_INTERSECTION_LEFT, L_INTERSECTION_RIGHT
|
|
516
|
+
|
|
517
|
+
L_INTERSECTION_LEFT:
|
|
518
|
+
out_set = call @sa_set_with_capacity(len)
|
|
519
|
+
call @set_insert_intersection(&out_set, &set, &other)
|
|
520
|
+
!left_smaller
|
|
521
|
+
!other_len
|
|
522
|
+
!len
|
|
523
|
+
!other
|
|
524
|
+
!set
|
|
525
|
+
return out_set
|
|
526
|
+
|
|
527
|
+
L_INTERSECTION_RIGHT:
|
|
528
|
+
out_set = call @sa_set_with_capacity(other_len)
|
|
529
|
+
call @set_insert_intersection(&out_set, &other, &set)
|
|
530
|
+
!left_smaller
|
|
531
|
+
!other_len
|
|
532
|
+
!len
|
|
533
|
+
!other
|
|
534
|
+
!set
|
|
535
|
+
return out_set
|
|
536
|
+
|
|
537
|
+
@export sa_set_difference(&set: ptr, &other: ptr) -> ^ptr:
|
|
538
|
+
L_ENTRY:
|
|
539
|
+
len = load set+HashSet_len as u64
|
|
540
|
+
out_set = call @sa_set_with_capacity(len)
|
|
541
|
+
call @set_insert_difference(&out_set, &set, &other)
|
|
542
|
+
!len
|
|
543
|
+
!other
|
|
544
|
+
!set
|
|
545
|
+
return out_set
|
|
546
|
+
|
|
547
|
+
@export sa_set_symmetric_difference(&set: ptr, &other: ptr) -> ^ptr:
|
|
548
|
+
L_ENTRY:
|
|
549
|
+
len = load set+HashSet_len as u64
|
|
550
|
+
other_len = load other+HashSet_len as u64
|
|
551
|
+
cap_hint = add len, other_len
|
|
552
|
+
out_set = call @sa_set_with_capacity(cap_hint)
|
|
553
|
+
call @set_insert_difference(&out_set, &set, &other)
|
|
554
|
+
call @set_insert_difference(&out_set, &other, &set)
|
|
555
|
+
!cap_hint
|
|
556
|
+
!other_len
|
|
557
|
+
!len
|
|
558
|
+
!other
|
|
559
|
+
!set
|
|
560
|
+
return out_set
|
|
561
|
+
|
|
562
|
+
[MACRO] SET_NEW %out_set
|
|
563
|
+
%out_set = call @sa_set_new()
|
|
564
|
+
[END_MACRO]
|
|
565
|
+
|
|
566
|
+
[MACRO] SET_WITH_CAPACITY %out_set, %cap
|
|
567
|
+
%out_set = call @sa_set_with_capacity(%cap)
|
|
568
|
+
[END_MACRO]
|
|
569
|
+
|
|
570
|
+
[MACRO] SET_TRY_WITH_CAPACITY %out_ok, %out_set, %cap
|
|
571
|
+
__set_try_new_slot_%out_ok = stack_alloc 8
|
|
572
|
+
%out_ok = call @sa_set_try_with_capacity(%cap, &__set_try_new_slot_%out_ok)
|
|
573
|
+
%out_set = load __set_try_new_slot_%out_ok+0 as ptr
|
|
574
|
+
[END_MACRO]
|
|
575
|
+
|
|
576
|
+
[MACRO] SET_LEN %out_len, %set_reg
|
|
577
|
+
%out_len = call @sa_set_len(&%set_reg)
|
|
578
|
+
[END_MACRO]
|
|
579
|
+
|
|
580
|
+
[MACRO] SET_CAPACITY %out_cap, %set_reg
|
|
581
|
+
%out_cap = call @sa_set_capacity(&%set_reg)
|
|
582
|
+
[END_MACRO]
|
|
583
|
+
|
|
584
|
+
[MACRO] SET_RESERVE %set_reg, %additional
|
|
585
|
+
call @sa_set_reserve(&%set_reg, %additional)
|
|
586
|
+
[END_MACRO]
|
|
587
|
+
|
|
588
|
+
[MACRO] SET_TRY_RESERVE %out_ok, %set_reg, %additional
|
|
589
|
+
%out_ok = call @sa_set_try_reserve(&%set_reg, %additional)
|
|
590
|
+
[END_MACRO]
|
|
591
|
+
|
|
592
|
+
[MACRO] SET_SHRINK_TO %set_reg, %min_capacity
|
|
593
|
+
call @sa_set_shrink_to(&%set_reg, %min_capacity)
|
|
594
|
+
[END_MACRO]
|
|
595
|
+
|
|
596
|
+
[MACRO] SET_SHRINK_TO_FIT %set_reg
|
|
597
|
+
call @sa_set_shrink_to_fit(&%set_reg)
|
|
598
|
+
[END_MACRO]
|
|
599
|
+
|
|
600
|
+
[MACRO] SET_IS_EMPTY %out_flag, %set_reg
|
|
601
|
+
%out_flag = call @sa_set_is_empty(&%set_reg)
|
|
602
|
+
[END_MACRO]
|
|
603
|
+
|
|
604
|
+
[MACRO] SET_CLEAR %set_reg
|
|
605
|
+
call @sa_set_clear(&%set_reg)
|
|
606
|
+
[END_MACRO]
|
|
607
|
+
|
|
608
|
+
[MACRO] SET_RETAIN %out_len, %set_reg, %pred_fn
|
|
609
|
+
__set_retain_slots_%out_len = load %set_reg+HashSet_slots as ptr
|
|
610
|
+
__set_retain_cap_%out_len = load %set_reg+HashSet_cap as u64
|
|
611
|
+
__set_retain_len_%out_len = load %set_reg+HashSet_len as u64
|
|
612
|
+
__set_retain_tombs_start_%out_len = load %set_reg+HashSet_tombs as u64
|
|
613
|
+
__set_retain_len_slot_%out_len = stack_alloc 8
|
|
614
|
+
__set_retain_tombs_slot_%out_len = stack_alloc 8
|
|
615
|
+
store __set_retain_len_slot_%out_len+0, __set_retain_len_%out_len as u64
|
|
616
|
+
store __set_retain_tombs_slot_%out_len+0, __set_retain_tombs_start_%out_len as u64
|
|
617
|
+
__set_retain_idx_slot_%out_len = stack_alloc 8
|
|
618
|
+
store __set_retain_idx_slot_%out_len+0, 0 as u64
|
|
619
|
+
jmp L_SET_RETAIN_HEAD_%out_len
|
|
620
|
+
|
|
621
|
+
L_SET_RETAIN_HEAD_%out_len:
|
|
622
|
+
__set_retain_idx_%out_len = load __set_retain_idx_slot_%out_len+0 as u64
|
|
623
|
+
__set_retain_done_%out_len = eq __set_retain_idx_%out_len, __set_retain_cap_%out_len
|
|
624
|
+
br __set_retain_done_%out_len -> L_SET_RETAIN_DONE_%out_len, L_SET_RETAIN_BODY_%out_len
|
|
625
|
+
|
|
626
|
+
L_SET_RETAIN_BODY_%out_len:
|
|
627
|
+
__set_retain_slot_off_%out_len = mul __set_retain_idx_%out_len, HashSetSlot_SIZE
|
|
628
|
+
__set_retain_slot_%out_len = ptr_add __set_retain_slots_%out_len, __set_retain_slot_off_%out_len
|
|
629
|
+
__set_retain_state_%out_len = load __set_retain_slot_%out_len+HashSetSlot_state as u8
|
|
630
|
+
__set_retain_filled_%out_len = eq __set_retain_state_%out_len, HashSet_STATE_FILLED
|
|
631
|
+
br __set_retain_filled_%out_len -> L_SET_RETAIN_CHECK_%out_len, L_SET_RETAIN_NEXT_%out_len
|
|
632
|
+
|
|
633
|
+
L_SET_RETAIN_CHECK_%out_len:
|
|
634
|
+
__set_retain_key_%out_len = load __set_retain_slot_%out_len+HashSetSlot_key as ptr
|
|
635
|
+
__set_retain_pred_%out_len = call %pred_fn(__set_retain_key_%out_len)
|
|
636
|
+
__set_retain_keep_%out_len = ne __set_retain_pred_%out_len, 0
|
|
637
|
+
br __set_retain_keep_%out_len -> L_SET_RETAIN_KEEP_%out_len, L_SET_RETAIN_DROP_%out_len
|
|
638
|
+
|
|
639
|
+
L_SET_RETAIN_KEEP_%out_len:
|
|
640
|
+
!__set_retain_keep_%out_len
|
|
641
|
+
!__set_retain_pred_%out_len
|
|
642
|
+
!__set_retain_key_%out_len
|
|
643
|
+
jmp L_SET_RETAIN_NEXT_%out_len
|
|
644
|
+
|
|
645
|
+
L_SET_RETAIN_DROP_%out_len:
|
|
646
|
+
__set_retain_cur_len_%out_len = load __set_retain_len_slot_%out_len+0 as u64
|
|
647
|
+
__set_retain_cur_tombs_%out_len = load __set_retain_tombs_slot_%out_len+0 as u64
|
|
648
|
+
__set_retain_next_len_%out_len = sub __set_retain_cur_len_%out_len, 1
|
|
649
|
+
__set_retain_next_tombs_%out_len = add __set_retain_cur_tombs_%out_len, 1
|
|
650
|
+
store __set_retain_len_slot_%out_len+0, __set_retain_next_len_%out_len as u64
|
|
651
|
+
store __set_retain_tombs_slot_%out_len+0, __set_retain_next_tombs_%out_len as u64
|
|
652
|
+
store __set_retain_slot_%out_len+HashSetSlot_hash, 0 as u64
|
|
653
|
+
store __set_retain_slot_%out_len+HashSetSlot_key, 0 as ptr
|
|
654
|
+
store __set_retain_slot_%out_len+HashSetSlot_value, 0 as ptr
|
|
655
|
+
store __set_retain_slot_%out_len+HashSetSlot_state, HashSet_STATE_TOMB as u8
|
|
656
|
+
!__set_retain_next_tombs_%out_len
|
|
657
|
+
!__set_retain_next_len_%out_len
|
|
658
|
+
!__set_retain_cur_tombs_%out_len
|
|
659
|
+
!__set_retain_cur_len_%out_len
|
|
660
|
+
!__set_retain_keep_%out_len
|
|
661
|
+
!__set_retain_pred_%out_len
|
|
662
|
+
!__set_retain_key_%out_len
|
|
663
|
+
jmp L_SET_RETAIN_NEXT_%out_len
|
|
664
|
+
|
|
665
|
+
L_SET_RETAIN_NEXT_%out_len:
|
|
666
|
+
__set_retain_next_idx_%out_len = add __set_retain_idx_%out_len, 1
|
|
667
|
+
store __set_retain_idx_slot_%out_len+0, __set_retain_next_idx_%out_len as u64
|
|
668
|
+
!__set_retain_next_idx_%out_len
|
|
669
|
+
!__set_retain_filled_%out_len
|
|
670
|
+
!__set_retain_state_%out_len
|
|
671
|
+
!__set_retain_slot_%out_len
|
|
672
|
+
!__set_retain_slot_off_%out_len
|
|
673
|
+
!__set_retain_done_%out_len
|
|
674
|
+
!__set_retain_idx_%out_len
|
|
675
|
+
jmp L_SET_RETAIN_HEAD_%out_len
|
|
676
|
+
|
|
677
|
+
L_SET_RETAIN_DONE_%out_len:
|
|
678
|
+
%out_len = load __set_retain_len_slot_%out_len+0 as u64
|
|
679
|
+
__set_retain_tombs_%out_len = load __set_retain_tombs_slot_%out_len+0 as u64
|
|
680
|
+
store %set_reg+HashSet_len, %out_len as u64
|
|
681
|
+
store %set_reg+HashSet_tombs, __set_retain_tombs_%out_len as u64
|
|
682
|
+
!__set_retain_done_%out_len
|
|
683
|
+
!__set_retain_idx_%out_len
|
|
684
|
+
!__set_retain_tombs_%out_len
|
|
685
|
+
!__set_retain_tombs_start_%out_len
|
|
686
|
+
!__set_retain_len_%out_len
|
|
687
|
+
!__set_retain_cap_%out_len
|
|
688
|
+
!__set_retain_slots_%out_len
|
|
689
|
+
[END_MACRO]
|
|
690
|
+
|
|
691
|
+
[MACRO] SET_DRAIN %out_vec, %set_reg
|
|
692
|
+
__set_drain_len_%out_vec = load %set_reg+HashSet_len as u64
|
|
693
|
+
EXPAND VEC_WITH_CAPACITY_U64 %out_vec, __set_drain_len_%out_vec
|
|
694
|
+
__set_drain_slots_%out_vec = load %set_reg+HashSet_slots as ptr
|
|
695
|
+
__set_drain_cap_%out_vec = load %set_reg+HashSet_cap as u64
|
|
696
|
+
__set_drain_idx_slot_%out_vec = stack_alloc 8
|
|
697
|
+
store __set_drain_idx_slot_%out_vec+0, 0 as u64
|
|
698
|
+
jmp L_SET_DRAIN_HEAD_%out_vec
|
|
699
|
+
|
|
700
|
+
L_SET_DRAIN_HEAD_%out_vec:
|
|
701
|
+
__set_drain_idx_%out_vec = load __set_drain_idx_slot_%out_vec+0 as u64
|
|
702
|
+
__set_drain_done_%out_vec = eq __set_drain_idx_%out_vec, __set_drain_cap_%out_vec
|
|
703
|
+
br __set_drain_done_%out_vec -> L_SET_DRAIN_DONE_%out_vec, L_SET_DRAIN_BODY_%out_vec
|
|
704
|
+
|
|
705
|
+
L_SET_DRAIN_BODY_%out_vec:
|
|
706
|
+
__set_drain_slot_off_%out_vec = mul __set_drain_idx_%out_vec, HashSetSlot_SIZE
|
|
707
|
+
__set_drain_slot_%out_vec = ptr_add __set_drain_slots_%out_vec, __set_drain_slot_off_%out_vec
|
|
708
|
+
__set_drain_state_%out_vec = load __set_drain_slot_%out_vec+HashSetSlot_state as u8
|
|
709
|
+
__set_drain_filled_%out_vec = eq __set_drain_state_%out_vec, HashSet_STATE_FILLED
|
|
710
|
+
br __set_drain_filled_%out_vec -> L_SET_DRAIN_PUSH_%out_vec, L_SET_DRAIN_NEXT_%out_vec
|
|
711
|
+
|
|
712
|
+
L_SET_DRAIN_PUSH_%out_vec:
|
|
713
|
+
__set_drain_key_%out_vec = load __set_drain_slot_%out_vec+HashSetSlot_key as ptr
|
|
714
|
+
__set_drain_key_bits_%out_vec = bitcast __set_drain_key_%out_vec as u64
|
|
715
|
+
EXPAND VEC_PUSH_U64 %out_vec, __set_drain_key_bits_%out_vec
|
|
716
|
+
store __set_drain_slot_%out_vec+HashSetSlot_hash, 0 as u64
|
|
717
|
+
store __set_drain_slot_%out_vec+HashSetSlot_key, 0 as ptr
|
|
718
|
+
store __set_drain_slot_%out_vec+HashSetSlot_value, 0 as ptr
|
|
719
|
+
store __set_drain_slot_%out_vec+HashSetSlot_state, HashSet_STATE_EMPTY as u8
|
|
720
|
+
!__set_drain_key_bits_%out_vec
|
|
721
|
+
!__set_drain_key_%out_vec
|
|
722
|
+
jmp L_SET_DRAIN_NEXT_%out_vec
|
|
723
|
+
|
|
724
|
+
L_SET_DRAIN_NEXT_%out_vec:
|
|
725
|
+
__set_drain_next_idx_%out_vec = add __set_drain_idx_%out_vec, 1
|
|
726
|
+
store __set_drain_idx_slot_%out_vec+0, __set_drain_next_idx_%out_vec as u64
|
|
727
|
+
!__set_drain_next_idx_%out_vec
|
|
728
|
+
!__set_drain_filled_%out_vec
|
|
729
|
+
!__set_drain_state_%out_vec
|
|
730
|
+
!__set_drain_slot_%out_vec
|
|
731
|
+
!__set_drain_slot_off_%out_vec
|
|
732
|
+
!__set_drain_done_%out_vec
|
|
733
|
+
!__set_drain_idx_%out_vec
|
|
734
|
+
jmp L_SET_DRAIN_HEAD_%out_vec
|
|
735
|
+
|
|
736
|
+
L_SET_DRAIN_DONE_%out_vec:
|
|
737
|
+
EXPAND NUM_U64_CHECKED_MUL __set_drain_bytes_ok_%out_vec, __set_drain_bytes_%out_vec, __set_drain_cap_%out_vec, HashSetSlot_SIZE
|
|
738
|
+
br __set_drain_bytes_ok_%out_vec -> L_SET_DRAIN_BYTES_OK_%out_vec, L_SET_DRAIN_BYTES_OVERFLOW_%out_vec
|
|
739
|
+
L_SET_DRAIN_BYTES_OVERFLOW_%out_vec:
|
|
740
|
+
panic(2101)
|
|
741
|
+
L_SET_DRAIN_BYTES_OK_%out_vec:
|
|
742
|
+
__set_drain_has_slots_%out_vec = ne __set_drain_slots_%out_vec, 0
|
|
743
|
+
br __set_drain_has_slots_%out_vec -> L_SET_DRAIN_CLEAR_SLOTS_%out_vec, L_SET_DRAIN_FINISH_%out_vec
|
|
744
|
+
|
|
745
|
+
L_SET_DRAIN_CLEAR_SLOTS_%out_vec:
|
|
746
|
+
call @sa_mem_set(&__set_drain_slots_%out_vec, 0, __set_drain_bytes_%out_vec)
|
|
747
|
+
jmp L_SET_DRAIN_FINISH_%out_vec
|
|
748
|
+
|
|
749
|
+
L_SET_DRAIN_FINISH_%out_vec:
|
|
750
|
+
store %set_reg+HashSet_len, 0 as u64
|
|
751
|
+
store %set_reg+HashSet_tombs, 0 as u64
|
|
752
|
+
!__set_drain_has_slots_%out_vec
|
|
753
|
+
!__set_drain_bytes_ok_%out_vec
|
|
754
|
+
!__set_drain_bytes_%out_vec
|
|
755
|
+
!__set_drain_done_%out_vec
|
|
756
|
+
!__set_drain_idx_%out_vec
|
|
757
|
+
!__set_drain_cap_%out_vec
|
|
758
|
+
!__set_drain_slots_%out_vec
|
|
759
|
+
!__set_drain_len_%out_vec
|
|
760
|
+
[END_MACRO]
|
|
761
|
+
|
|
762
|
+
[MACRO] SET_KEYS %out_vec, %set_reg
|
|
763
|
+
EXPAND MAP_KEYS %out_vec, %set_reg
|
|
764
|
+
[END_MACRO]
|
|
765
|
+
|
|
766
|
+
[MACRO] SET_ITER %out_vec, %set_reg
|
|
767
|
+
EXPAND SET_KEYS %out_vec, %set_reg
|
|
768
|
+
[END_MACRO]
|
|
769
|
+
|
|
770
|
+
[MACRO] SET_REF_INTO_ITER %out_vec, %set_reg
|
|
771
|
+
EXPAND SET_ITER %out_vec, %set_reg
|
|
772
|
+
[END_MACRO]
|
|
773
|
+
|
|
774
|
+
[MACRO] SET_INTO_KEYS %out_vec, %set_reg
|
|
775
|
+
EXPAND SET_DRAIN %out_vec, %set_reg
|
|
776
|
+
[END_MACRO]
|
|
777
|
+
|
|
778
|
+
[MACRO] SET_INTO_ITER %out_vec, %set_reg
|
|
779
|
+
EXPAND SET_DRAIN %out_vec, %set_reg
|
|
780
|
+
[END_MACRO]
|
|
781
|
+
|
|
782
|
+
[MACRO] SET_EXTRACT_IF %out_len, %out_vec, %set_reg, %pred_fn
|
|
783
|
+
__set_extract_slots_%out_len = load %set_reg+HashSet_slots as ptr
|
|
784
|
+
__set_extract_cap_%out_len = load %set_reg+HashSet_cap as u64
|
|
785
|
+
__set_extract_len_%out_len = load %set_reg+HashSet_len as u64
|
|
786
|
+
__set_extract_tombs_start_%out_len = load %set_reg+HashSet_tombs as u64
|
|
787
|
+
EXPAND VEC_WITH_CAPACITY_U64 %out_vec, __set_extract_len_%out_len
|
|
788
|
+
__set_extract_len_slot_%out_len = stack_alloc 8
|
|
789
|
+
__set_extract_tombs_slot_%out_len = stack_alloc 8
|
|
790
|
+
store __set_extract_len_slot_%out_len+0, __set_extract_len_%out_len as u64
|
|
791
|
+
store __set_extract_tombs_slot_%out_len+0, __set_extract_tombs_start_%out_len as u64
|
|
792
|
+
__set_extract_idx_slot_%out_len = stack_alloc 8
|
|
793
|
+
store __set_extract_idx_slot_%out_len+0, 0 as u64
|
|
794
|
+
jmp L_SET_EXTRACT_HEAD_%out_len
|
|
795
|
+
|
|
796
|
+
L_SET_EXTRACT_HEAD_%out_len:
|
|
797
|
+
__set_extract_idx_%out_len = load __set_extract_idx_slot_%out_len+0 as u64
|
|
798
|
+
__set_extract_done_%out_len = eq __set_extract_idx_%out_len, __set_extract_cap_%out_len
|
|
799
|
+
br __set_extract_done_%out_len -> L_SET_EXTRACT_DONE_%out_len, L_SET_EXTRACT_BODY_%out_len
|
|
800
|
+
|
|
801
|
+
L_SET_EXTRACT_BODY_%out_len:
|
|
802
|
+
__set_extract_slot_off_%out_len = mul __set_extract_idx_%out_len, HashSetSlot_SIZE
|
|
803
|
+
__set_extract_slot_%out_len = ptr_add __set_extract_slots_%out_len, __set_extract_slot_off_%out_len
|
|
804
|
+
__set_extract_state_%out_len = load __set_extract_slot_%out_len+HashSetSlot_state as u8
|
|
805
|
+
__set_extract_filled_%out_len = eq __set_extract_state_%out_len, HashSet_STATE_FILLED
|
|
806
|
+
br __set_extract_filled_%out_len -> L_SET_EXTRACT_CHECK_%out_len, L_SET_EXTRACT_NEXT_%out_len
|
|
807
|
+
|
|
808
|
+
L_SET_EXTRACT_CHECK_%out_len:
|
|
809
|
+
__set_extract_key_%out_len = load __set_extract_slot_%out_len+HashSetSlot_key as ptr
|
|
810
|
+
__set_extract_pred_%out_len = call %pred_fn(__set_extract_key_%out_len)
|
|
811
|
+
__set_extract_take_%out_len = ne __set_extract_pred_%out_len, 0
|
|
812
|
+
br __set_extract_take_%out_len -> L_SET_EXTRACT_TAKE_%out_len, L_SET_EXTRACT_KEEP_%out_len
|
|
813
|
+
|
|
814
|
+
L_SET_EXTRACT_KEEP_%out_len:
|
|
815
|
+
!__set_extract_take_%out_len
|
|
816
|
+
!__set_extract_pred_%out_len
|
|
817
|
+
!__set_extract_key_%out_len
|
|
818
|
+
jmp L_SET_EXTRACT_NEXT_%out_len
|
|
819
|
+
|
|
820
|
+
L_SET_EXTRACT_TAKE_%out_len:
|
|
821
|
+
__set_extract_key_bits_%out_len = bitcast __set_extract_key_%out_len as u64
|
|
822
|
+
EXPAND VEC_PUSH_U64 %out_vec, __set_extract_key_bits_%out_len
|
|
823
|
+
__set_extract_cur_len_%out_len = load __set_extract_len_slot_%out_len+0 as u64
|
|
824
|
+
__set_extract_cur_tombs_%out_len = load __set_extract_tombs_slot_%out_len+0 as u64
|
|
825
|
+
__set_extract_next_len_%out_len = sub __set_extract_cur_len_%out_len, 1
|
|
826
|
+
__set_extract_next_tombs_%out_len = add __set_extract_cur_tombs_%out_len, 1
|
|
827
|
+
store __set_extract_len_slot_%out_len+0, __set_extract_next_len_%out_len as u64
|
|
828
|
+
store __set_extract_tombs_slot_%out_len+0, __set_extract_next_tombs_%out_len as u64
|
|
829
|
+
store __set_extract_slot_%out_len+HashSetSlot_hash, 0 as u64
|
|
830
|
+
store __set_extract_slot_%out_len+HashSetSlot_key, 0 as ptr
|
|
831
|
+
store __set_extract_slot_%out_len+HashSetSlot_value, 0 as ptr
|
|
832
|
+
store __set_extract_slot_%out_len+HashSetSlot_state, HashSet_STATE_TOMB as u8
|
|
833
|
+
!__set_extract_next_tombs_%out_len
|
|
834
|
+
!__set_extract_next_len_%out_len
|
|
835
|
+
!__set_extract_cur_tombs_%out_len
|
|
836
|
+
!__set_extract_cur_len_%out_len
|
|
837
|
+
!__set_extract_key_bits_%out_len
|
|
838
|
+
!__set_extract_take_%out_len
|
|
839
|
+
!__set_extract_pred_%out_len
|
|
840
|
+
!__set_extract_key_%out_len
|
|
841
|
+
jmp L_SET_EXTRACT_NEXT_%out_len
|
|
842
|
+
|
|
843
|
+
L_SET_EXTRACT_NEXT_%out_len:
|
|
844
|
+
__set_extract_next_idx_%out_len = add __set_extract_idx_%out_len, 1
|
|
845
|
+
store __set_extract_idx_slot_%out_len+0, __set_extract_next_idx_%out_len as u64
|
|
846
|
+
!__set_extract_next_idx_%out_len
|
|
847
|
+
!__set_extract_filled_%out_len
|
|
848
|
+
!__set_extract_state_%out_len
|
|
849
|
+
!__set_extract_slot_%out_len
|
|
850
|
+
!__set_extract_slot_off_%out_len
|
|
851
|
+
!__set_extract_done_%out_len
|
|
852
|
+
!__set_extract_idx_%out_len
|
|
853
|
+
jmp L_SET_EXTRACT_HEAD_%out_len
|
|
854
|
+
|
|
855
|
+
L_SET_EXTRACT_DONE_%out_len:
|
|
856
|
+
%out_len = load __set_extract_len_slot_%out_len+0 as u64
|
|
857
|
+
__set_extract_tombs_%out_len = load __set_extract_tombs_slot_%out_len+0 as u64
|
|
858
|
+
store %set_reg+HashSet_len, %out_len as u64
|
|
859
|
+
store %set_reg+HashSet_tombs, __set_extract_tombs_%out_len as u64
|
|
860
|
+
!__set_extract_done_%out_len
|
|
861
|
+
!__set_extract_idx_%out_len
|
|
862
|
+
!__set_extract_tombs_%out_len
|
|
863
|
+
!__set_extract_tombs_start_%out_len
|
|
864
|
+
!__set_extract_len_%out_len
|
|
865
|
+
!__set_extract_cap_%out_len
|
|
866
|
+
!__set_extract_slots_%out_len
|
|
867
|
+
[END_MACRO]
|
|
868
|
+
|
|
869
|
+
[MACRO] SET_INSERT %out_ok, %set_reg, %key
|
|
870
|
+
%out_ok = call @sa_set_insert(&%set_reg, &%key)
|
|
871
|
+
[END_MACRO]
|
|
872
|
+
|
|
873
|
+
[MACRO] SET_CONTAINS %out_ok, %set_reg, %key
|
|
874
|
+
%out_ok = call @sa_set_contains(&%set_reg, &%key)
|
|
875
|
+
[END_MACRO]
|
|
876
|
+
|
|
877
|
+
[MACRO] SET_GET %out_ok, %out_key, %set_reg, %key
|
|
878
|
+
__set_get_slot_%out_ok = stack_alloc 8
|
|
879
|
+
%out_ok = call @sa_set_get(&%set_reg, &%key, &__set_get_slot_%out_ok)
|
|
880
|
+
%out_key = load __set_get_slot_%out_ok+0 as ptr
|
|
881
|
+
[END_MACRO]
|
|
882
|
+
|
|
883
|
+
[MACRO] SET_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key
|
|
884
|
+
%out_inserted = call @sa_set_insert(&%set_reg, &%key)
|
|
885
|
+
__set_get_or_insert_slot_%out_inserted = stack_alloc 8
|
|
886
|
+
__set_get_or_insert_ok_%out_inserted = call @sa_set_get(&%set_reg, &%key, &__set_get_or_insert_slot_%out_inserted)
|
|
887
|
+
%out_key = load __set_get_or_insert_slot_%out_inserted+0 as ptr
|
|
888
|
+
!__set_get_or_insert_ok_%out_inserted
|
|
889
|
+
[END_MACRO]
|
|
890
|
+
|
|
891
|
+
[MACRO] SET_ENTRY_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key
|
|
892
|
+
EXPAND SET_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key
|
|
893
|
+
[END_MACRO]
|
|
894
|
+
|
|
895
|
+
// Rust method-name bare alias for the common set entry path (get_or_insert).
|
|
896
|
+
[MACRO] SET_ENTRY %out_inserted, %out_key, %set_reg, %key
|
|
897
|
+
EXPAND SET_ENTRY_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key
|
|
898
|
+
[END_MACRO]
|
|
899
|
+
|
|
900
|
+
[MACRO] SET_OR_INSERT %out_inserted, %out_key, %set_reg, %key
|
|
901
|
+
EXPAND SET_GET_OR_INSERT %out_inserted, %out_key, %set_reg, %key
|
|
902
|
+
[END_MACRO]
|
|
903
|
+
|
|
904
|
+
[MACRO] SET_EXTRA_CAPACITY %out_extra, %set_reg
|
|
905
|
+
__set_ec_cap_%out_extra = call @sa_set_capacity(&%set_reg)
|
|
906
|
+
__set_ec_len_%out_extra = call @sa_set_len(&%set_reg)
|
|
907
|
+
%out_extra = sub __set_ec_cap_%out_extra, __set_ec_len_%out_extra
|
|
908
|
+
!__set_ec_len_%out_extra
|
|
909
|
+
!__set_ec_cap_%out_extra
|
|
910
|
+
[END_MACRO]
|
|
911
|
+
|
|
912
|
+
[MACRO] SET_TAKE %out_ok, %out_key, %set_reg, %key
|
|
913
|
+
__set_take_slot_%out_ok = stack_alloc 8
|
|
914
|
+
%out_ok = call @sa_set_take(&%set_reg, &%key, &__set_take_slot_%out_ok)
|
|
915
|
+
%out_key = load __set_take_slot_%out_ok+0 as ptr
|
|
916
|
+
[END_MACRO]
|
|
917
|
+
|
|
918
|
+
[MACRO] SET_REPLACE %out_replaced, %out_old_key, %set_reg, %key
|
|
919
|
+
__set_replace_slot_%out_replaced = stack_alloc 8
|
|
920
|
+
%out_replaced = call @sa_set_replace(&%set_reg, &%key, &__set_replace_slot_%out_replaced)
|
|
921
|
+
%out_old_key = load __set_replace_slot_%out_replaced+0 as ptr
|
|
922
|
+
[END_MACRO]
|
|
923
|
+
|
|
924
|
+
[MACRO] SET_IS_DISJOINT %out_ok, %set_reg, %other_set
|
|
925
|
+
%out_ok = call @sa_set_is_disjoint(&%set_reg, &%other_set)
|
|
926
|
+
[END_MACRO]
|
|
927
|
+
|
|
928
|
+
[MACRO] SET_IS_SUBSET %out_ok, %set_reg, %other_set
|
|
929
|
+
%out_ok = call @sa_set_is_subset(&%set_reg, &%other_set)
|
|
930
|
+
[END_MACRO]
|
|
931
|
+
|
|
932
|
+
[MACRO] SET_IS_SUPERSET %out_ok, %set_reg, %other_set
|
|
933
|
+
%out_ok = call @sa_set_is_superset(&%set_reg, &%other_set)
|
|
934
|
+
[END_MACRO]
|
|
935
|
+
|
|
936
|
+
[MACRO] SET_REMOVE %out_ok, %set_reg, %key
|
|
937
|
+
%out_ok = call @sa_set_remove(&%set_reg, &%key)
|
|
938
|
+
[END_MACRO]
|
|
939
|
+
|
|
940
|
+
[MACRO] SET_UNION %out_set, %set_reg, %other_set
|
|
941
|
+
%out_set = call @sa_set_union(&%set_reg, &%other_set)
|
|
942
|
+
[END_MACRO]
|
|
943
|
+
|
|
944
|
+
[MACRO] SET_INTERSECTION %out_set, %set_reg, %other_set
|
|
945
|
+
%out_set = call @sa_set_intersection(&%set_reg, &%other_set)
|
|
946
|
+
[END_MACRO]
|
|
947
|
+
|
|
948
|
+
[MACRO] SET_DIFFERENCE %out_set, %set_reg, %other_set
|
|
949
|
+
%out_set = call @sa_set_difference(&%set_reg, &%other_set)
|
|
950
|
+
[END_MACRO]
|
|
951
|
+
|
|
952
|
+
[MACRO] SET_SYMMETRIC_DIFFERENCE %out_set, %set_reg, %other_set
|
|
953
|
+
%out_set = call @sa_set_symmetric_difference(&%set_reg, &%other_set)
|
|
954
|
+
[END_MACRO]
|
|
955
|
+
|
|
956
|
+
[MACRO] SET_BITOR %out_set, %set_reg, %other_set
|
|
957
|
+
EXPAND SET_UNION %out_set, %set_reg, %other_set
|
|
958
|
+
[END_MACRO]
|
|
959
|
+
|
|
960
|
+
[MACRO] SET_BITAND %out_set, %set_reg, %other_set
|
|
961
|
+
EXPAND SET_INTERSECTION %out_set, %set_reg, %other_set
|
|
962
|
+
[END_MACRO]
|
|
963
|
+
|
|
964
|
+
[MACRO] SET_SUB %out_set, %set_reg, %other_set
|
|
965
|
+
EXPAND SET_DIFFERENCE %out_set, %set_reg, %other_set
|
|
966
|
+
[END_MACRO]
|
|
967
|
+
|
|
968
|
+
[MACRO] SET_BITXOR %out_set, %set_reg, %other_set
|
|
969
|
+
EXPAND SET_SYMMETRIC_DIFFERENCE %out_set, %set_reg, %other_set
|
|
970
|
+
[END_MACRO]
|
|
971
|
+
|
|
972
|
+
[MACRO] SET_FREE %set_reg
|
|
973
|
+
call @sa_set_free(^%set_reg)
|
|
974
|
+
[END_MACRO]
|
|
975
|
+
|
|
976
|
+
[MACRO] SET_LIT1 %out_set, %key1
|
|
977
|
+
EXPAND SET_NEW %out_set
|
|
978
|
+
EXPAND SET_INSERT __set_lit1_ok_1_%out_set, %out_set, %key1
|
|
979
|
+
!__set_lit1_ok_1_%out_set
|
|
980
|
+
[END_MACRO]
|
|
981
|
+
|
|
982
|
+
[MACRO] SET_LIT2 %out_set, %key1, %key2
|
|
983
|
+
EXPAND SET_NEW %out_set
|
|
984
|
+
EXPAND SET_INSERT __set_lit2_ok_1_%out_set, %out_set, %key1
|
|
985
|
+
EXPAND SET_INSERT __set_lit2_ok_2_%out_set, %out_set, %key2
|
|
986
|
+
!__set_lit2_ok_1_%out_set
|
|
987
|
+
!__set_lit2_ok_2_%out_set
|
|
988
|
+
[END_MACRO]
|
|
989
|
+
|
|
990
|
+
[MACRO] SET_LIT3 %out_set, %key1, %key2, %key3
|
|
991
|
+
EXPAND SET_NEW %out_set
|
|
992
|
+
EXPAND SET_INSERT __set_lit3_ok_1_%out_set, %out_set, %key1
|
|
993
|
+
EXPAND SET_INSERT __set_lit3_ok_2_%out_set, %out_set, %key2
|
|
994
|
+
EXPAND SET_INSERT __set_lit3_ok_3_%out_set, %out_set, %key3
|
|
995
|
+
!__set_lit3_ok_1_%out_set
|
|
996
|
+
!__set_lit3_ok_2_%out_set
|
|
997
|
+
!__set_lit3_ok_3_%out_set
|
|
998
|
+
[END_MACRO]
|
|
999
|
+
|
|
1000
|
+
// Rust Default-style empty set constructor alias.
|
|
1001
|
+
|
|
1002
|
+
[MACRO] SET_DEFAULT %out_set
|
|
1003
|
+
EXPAND SET_NEW %out_set
|
|
1004
|
+
[END_MACRO]
|