@grain/stdlib 0.6.6 → 0.7.1
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/CHANGELOG.md +67 -0
- package/LICENSE +1 -1
- package/README.md +2 -2
- package/array.gr +55 -7
- package/array.md +606 -560
- package/bigint.md +228 -228
- package/buffer.gr +85 -53
- package/buffer.md +442 -319
- package/bytes.gr +112 -35
- package/bytes.md +299 -219
- package/char.gr +201 -99
- package/char.md +447 -120
- package/exception.gr +11 -11
- package/exception.md +29 -4
- package/float32.gr +327 -3
- package/float32.md +698 -111
- package/float64.gr +320 -3
- package/float64.md +698 -111
- package/fs.gr +1082 -0
- package/fs.md +630 -0
- package/hash.gr +142 -88
- package/hash.md +105 -17
- package/int16.md +178 -178
- package/int32.gr +26 -5
- package/int32.md +266 -231
- package/int64.gr +27 -2
- package/int64.md +266 -231
- package/int8.md +178 -178
- package/json.gr +366 -51
- package/json.md +431 -15
- package/list.gr +328 -31
- package/list.md +759 -336
- package/map.gr +20 -12
- package/map.md +266 -260
- package/marshal.gr +41 -40
- package/marshal.md +14 -14
- package/number.gr +278 -35
- package/number.md +688 -269
- package/option.md +162 -162
- package/package.json +5 -3
- package/path.gr +48 -0
- package/path.md +180 -89
- package/pervasives.gr +2 -2
- package/pervasives.md +275 -275
- package/priorityqueue.gr +7 -7
- package/priorityqueue.md +131 -131
- package/queue.gr +183 -29
- package/queue.md +404 -148
- package/random.md +43 -43
- package/range.gr +4 -4
- package/range.md +42 -42
- package/rational.md +123 -123
- package/regex.gr +52 -51
- package/regex.md +102 -102
- package/result.md +118 -118
- package/runtime/atof/common.md +39 -39
- package/runtime/atof/decimal.gr +6 -6
- package/runtime/atof/decimal.md +14 -14
- package/runtime/atof/lemire.gr +5 -5
- package/runtime/atof/lemire.md +1 -1
- package/runtime/atof/parse.gr +16 -16
- package/runtime/atof/parse.md +2 -2
- package/runtime/atof/slow.md +1 -1
- package/runtime/atof/table.md +2 -2
- package/runtime/atoi/parse.gr +3 -3
- package/runtime/atoi/parse.md +1 -1
- package/runtime/bigint.gr +15 -47
- package/runtime/bigint.md +54 -60
- package/runtime/compare.gr +2 -2
- package/runtime/compare.md +8 -8
- package/runtime/dataStructures.md +211 -211
- package/runtime/debugPrint.gr +4 -1
- package/runtime/debugPrint.md +9 -9
- package/runtime/equal.gr +99 -77
- package/runtime/equal.md +8 -8
- package/runtime/exception.gr +62 -82
- package/runtime/exception.md +62 -11
- package/runtime/gc.gr +39 -45
- package/runtime/gc.md +4 -4
- package/runtime/malloc.gr +7 -7
- package/runtime/malloc.md +13 -13
- package/runtime/math/kernel/cos.gr +70 -0
- package/runtime/math/kernel/cos.md +14 -0
- package/runtime/math/kernel/sin.gr +65 -0
- package/runtime/math/kernel/sin.md +14 -0
- package/runtime/math/kernel/tan.gr +136 -0
- package/runtime/math/kernel/tan.md +14 -0
- package/runtime/math/rempio2.gr +244 -0
- package/runtime/math/rempio2.md +14 -0
- package/runtime/math/trig.gr +130 -0
- package/runtime/math/trig.md +28 -0
- package/runtime/math/umuldi.gr +26 -0
- package/runtime/math/umuldi.md +14 -0
- package/runtime/numberUtils.gr +29 -29
- package/runtime/numberUtils.md +12 -12
- package/runtime/numbers.gr +373 -381
- package/runtime/numbers.md +348 -342
- package/runtime/string.gr +37 -105
- package/runtime/string.md +20 -26
- package/runtime/unsafe/constants.md +24 -24
- package/runtime/unsafe/conv.md +19 -19
- package/runtime/unsafe/memory.gr +24 -20
- package/runtime/unsafe/memory.md +27 -7
- package/runtime/unsafe/offsets.gr +36 -0
- package/runtime/unsafe/offsets.md +88 -0
- package/runtime/unsafe/panic.gr +28 -0
- package/runtime/unsafe/panic.md +14 -0
- package/runtime/unsafe/tags.md +32 -32
- package/runtime/unsafe/wasmf32.md +28 -28
- package/runtime/unsafe/wasmf64.md +28 -28
- package/runtime/unsafe/wasmi32.md +47 -47
- package/runtime/unsafe/wasmi64.md +50 -50
- package/runtime/utf8.gr +189 -0
- package/runtime/utf8.md +117 -0
- package/runtime/wasi.gr +4 -2
- package/runtime/wasi.md +147 -147
- package/set.gr +18 -11
- package/set.md +253 -247
- package/stack.gr +171 -2
- package/stack.md +371 -89
- package/string.gr +352 -557
- package/string.md +298 -255
- package/uint16.md +170 -170
- package/uint32.gr +25 -4
- package/uint32.md +249 -214
- package/uint64.gr +25 -5
- package/uint64.md +249 -214
- package/uint8.md +170 -170
- package/uri.gr +57 -53
- package/uri.md +88 -89
- package/wasi/file.gr +67 -59
- package/wasi/file.md +308 -308
- package/wasi/process.md +26 -26
- package/wasi/random.md +12 -12
- package/wasi/time.md +16 -16
- package/runtime/utils/printing.gr +0 -60
- package/runtime/utils/printing.md +0 -26
package/set.gr
CHANGED
|
@@ -11,7 +11,6 @@ module Set
|
|
|
11
11
|
from "list" include List
|
|
12
12
|
from "array" include Array
|
|
13
13
|
from "hash" include Hash
|
|
14
|
-
use Hash.{ hash }
|
|
15
14
|
|
|
16
15
|
record rec Bucket<t> {
|
|
17
16
|
mut key: t,
|
|
@@ -20,6 +19,7 @@ record rec Bucket<t> {
|
|
|
20
19
|
|
|
21
20
|
abstract record Set<k> {
|
|
22
21
|
mut size: Number,
|
|
22
|
+
hashInstance: Hash.HashInstance,
|
|
23
23
|
mut buckets: Array<Option<Bucket<k>>>,
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -41,25 +41,28 @@ provide record InternalSetStats {
|
|
|
41
41
|
* @param size: The initial storage size of the set
|
|
42
42
|
* @returns An empty set with the given initial storage size
|
|
43
43
|
*
|
|
44
|
+
* @throws Failure(String): If WASI random_get fails
|
|
45
|
+
*
|
|
44
46
|
* @since v0.3.0
|
|
45
47
|
* @history v0.6.0: Merged with `makeSized`; modified signature to accept size
|
|
46
48
|
*/
|
|
47
49
|
provide let make = (size=16) => {
|
|
48
50
|
let buckets = Array.make(size, None)
|
|
49
|
-
|
|
51
|
+
let hashInstance = Hash.make()
|
|
52
|
+
{ size: 0, hashInstance, buckets }
|
|
50
53
|
}
|
|
51
54
|
|
|
52
|
-
let getBucketIndex = (key, buckets) => {
|
|
55
|
+
let getBucketIndex = (hashInstance, key, buckets) => {
|
|
53
56
|
let bucketsLength = Array.length(buckets)
|
|
54
|
-
let hashedKey = hash(key)
|
|
57
|
+
let hashedKey = Hash.hash(hashInstance, key)
|
|
55
58
|
hashedKey % bucketsLength
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
let rec copyNodeWithNewHash = (oldNode, next, tail) => {
|
|
61
|
+
let rec copyNodeWithNewHash = (hashInstance, oldNode, next, tail) => {
|
|
59
62
|
match (oldNode) {
|
|
60
63
|
None => void,
|
|
61
64
|
Some(node) => {
|
|
62
|
-
let idx = getBucketIndex(node.key, next)
|
|
65
|
+
let idx = getBucketIndex(hashInstance, node.key, next)
|
|
63
66
|
let newNode = Some(node)
|
|
64
67
|
match (tail[idx]) {
|
|
65
68
|
None => {
|
|
@@ -73,7 +76,7 @@ let rec copyNodeWithNewHash = (oldNode, next, tail) => {
|
|
|
73
76
|
// Always place this node as the new tail
|
|
74
77
|
tail[idx] = newNode
|
|
75
78
|
// Recurse with the next node
|
|
76
|
-
copyNodeWithNewHash(node.next, next, tail)
|
|
79
|
+
copyNodeWithNewHash(hashInstance, node.next, next, tail)
|
|
77
80
|
},
|
|
78
81
|
}
|
|
79
82
|
}
|
|
@@ -87,8 +90,9 @@ let resize = set => {
|
|
|
87
90
|
// This tracks the tail nodes so we can set their `next` to None
|
|
88
91
|
let tailNodes = Array.make(nextSize, None)
|
|
89
92
|
set.buckets = nextBuckets
|
|
93
|
+
let hashInstance = set.hashInstance
|
|
90
94
|
Array.forEach(old => {
|
|
91
|
-
copyNodeWithNewHash(old, nextBuckets, tailNodes)
|
|
95
|
+
copyNodeWithNewHash(hashInstance, old, nextBuckets, tailNodes)
|
|
92
96
|
}, currentBuckets)
|
|
93
97
|
Array.forEach(tail => {
|
|
94
98
|
match (tail) {
|
|
@@ -124,7 +128,8 @@ let rec nodeInBucket = (key, node) => {
|
|
|
124
128
|
*/
|
|
125
129
|
provide let add = (key, set) => {
|
|
126
130
|
let buckets = set.buckets
|
|
127
|
-
let
|
|
131
|
+
let hashInstance = set.hashInstance
|
|
132
|
+
let idx = getBucketIndex(hashInstance, key, buckets)
|
|
128
133
|
let bucket = buckets[idx]
|
|
129
134
|
match (bucket) {
|
|
130
135
|
None => {
|
|
@@ -157,7 +162,8 @@ provide let add = (key, set) => {
|
|
|
157
162
|
*/
|
|
158
163
|
provide let contains = (key, set) => {
|
|
159
164
|
let buckets = set.buckets
|
|
160
|
-
let
|
|
165
|
+
let hashInstance = set.hashInstance
|
|
166
|
+
let idx = getBucketIndex(hashInstance, key, buckets)
|
|
161
167
|
let bucket = buckets[idx]
|
|
162
168
|
match (bucket) {
|
|
163
169
|
None => false,
|
|
@@ -189,7 +195,8 @@ let rec removeInBucket = (key, node) => {
|
|
|
189
195
|
*/
|
|
190
196
|
provide let remove = (key, set) => {
|
|
191
197
|
let buckets = set.buckets
|
|
192
|
-
let
|
|
198
|
+
let hashInstance = set.hashInstance
|
|
199
|
+
let idx = getBucketIndex(hashInstance, key, buckets)
|
|
193
200
|
let bucket = buckets[idx]
|
|
194
201
|
match (bucket) {
|
|
195
202
|
None => void,
|