@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.
- package/bin/sa.js +13 -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,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]
|