@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.
Files changed (137) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/LICENSE +1 -1
  3. package/README.md +2 -2
  4. package/array.gr +55 -7
  5. package/array.md +606 -560
  6. package/bigint.md +228 -228
  7. package/buffer.gr +85 -53
  8. package/buffer.md +442 -319
  9. package/bytes.gr +112 -35
  10. package/bytes.md +299 -219
  11. package/char.gr +201 -99
  12. package/char.md +447 -120
  13. package/exception.gr +11 -11
  14. package/exception.md +29 -4
  15. package/float32.gr +327 -3
  16. package/float32.md +698 -111
  17. package/float64.gr +320 -3
  18. package/float64.md +698 -111
  19. package/fs.gr +1082 -0
  20. package/fs.md +630 -0
  21. package/hash.gr +142 -88
  22. package/hash.md +105 -17
  23. package/int16.md +178 -178
  24. package/int32.gr +26 -5
  25. package/int32.md +266 -231
  26. package/int64.gr +27 -2
  27. package/int64.md +266 -231
  28. package/int8.md +178 -178
  29. package/json.gr +366 -51
  30. package/json.md +431 -15
  31. package/list.gr +328 -31
  32. package/list.md +759 -336
  33. package/map.gr +20 -12
  34. package/map.md +266 -260
  35. package/marshal.gr +41 -40
  36. package/marshal.md +14 -14
  37. package/number.gr +278 -35
  38. package/number.md +688 -269
  39. package/option.md +162 -162
  40. package/package.json +5 -3
  41. package/path.gr +48 -0
  42. package/path.md +180 -89
  43. package/pervasives.gr +2 -2
  44. package/pervasives.md +275 -275
  45. package/priorityqueue.gr +7 -7
  46. package/priorityqueue.md +131 -131
  47. package/queue.gr +183 -29
  48. package/queue.md +404 -148
  49. package/random.md +43 -43
  50. package/range.gr +4 -4
  51. package/range.md +42 -42
  52. package/rational.md +123 -123
  53. package/regex.gr +52 -51
  54. package/regex.md +102 -102
  55. package/result.md +118 -118
  56. package/runtime/atof/common.md +39 -39
  57. package/runtime/atof/decimal.gr +6 -6
  58. package/runtime/atof/decimal.md +14 -14
  59. package/runtime/atof/lemire.gr +5 -5
  60. package/runtime/atof/lemire.md +1 -1
  61. package/runtime/atof/parse.gr +16 -16
  62. package/runtime/atof/parse.md +2 -2
  63. package/runtime/atof/slow.md +1 -1
  64. package/runtime/atof/table.md +2 -2
  65. package/runtime/atoi/parse.gr +3 -3
  66. package/runtime/atoi/parse.md +1 -1
  67. package/runtime/bigint.gr +15 -47
  68. package/runtime/bigint.md +54 -60
  69. package/runtime/compare.gr +2 -2
  70. package/runtime/compare.md +8 -8
  71. package/runtime/dataStructures.md +211 -211
  72. package/runtime/debugPrint.gr +4 -1
  73. package/runtime/debugPrint.md +9 -9
  74. package/runtime/equal.gr +99 -77
  75. package/runtime/equal.md +8 -8
  76. package/runtime/exception.gr +62 -82
  77. package/runtime/exception.md +62 -11
  78. package/runtime/gc.gr +39 -45
  79. package/runtime/gc.md +4 -4
  80. package/runtime/malloc.gr +7 -7
  81. package/runtime/malloc.md +13 -13
  82. package/runtime/math/kernel/cos.gr +70 -0
  83. package/runtime/math/kernel/cos.md +14 -0
  84. package/runtime/math/kernel/sin.gr +65 -0
  85. package/runtime/math/kernel/sin.md +14 -0
  86. package/runtime/math/kernel/tan.gr +136 -0
  87. package/runtime/math/kernel/tan.md +14 -0
  88. package/runtime/math/rempio2.gr +244 -0
  89. package/runtime/math/rempio2.md +14 -0
  90. package/runtime/math/trig.gr +130 -0
  91. package/runtime/math/trig.md +28 -0
  92. package/runtime/math/umuldi.gr +26 -0
  93. package/runtime/math/umuldi.md +14 -0
  94. package/runtime/numberUtils.gr +29 -29
  95. package/runtime/numberUtils.md +12 -12
  96. package/runtime/numbers.gr +373 -381
  97. package/runtime/numbers.md +348 -342
  98. package/runtime/string.gr +37 -105
  99. package/runtime/string.md +20 -26
  100. package/runtime/unsafe/constants.md +24 -24
  101. package/runtime/unsafe/conv.md +19 -19
  102. package/runtime/unsafe/memory.gr +24 -20
  103. package/runtime/unsafe/memory.md +27 -7
  104. package/runtime/unsafe/offsets.gr +36 -0
  105. package/runtime/unsafe/offsets.md +88 -0
  106. package/runtime/unsafe/panic.gr +28 -0
  107. package/runtime/unsafe/panic.md +14 -0
  108. package/runtime/unsafe/tags.md +32 -32
  109. package/runtime/unsafe/wasmf32.md +28 -28
  110. package/runtime/unsafe/wasmf64.md +28 -28
  111. package/runtime/unsafe/wasmi32.md +47 -47
  112. package/runtime/unsafe/wasmi64.md +50 -50
  113. package/runtime/utf8.gr +189 -0
  114. package/runtime/utf8.md +117 -0
  115. package/runtime/wasi.gr +4 -2
  116. package/runtime/wasi.md +147 -147
  117. package/set.gr +18 -11
  118. package/set.md +253 -247
  119. package/stack.gr +171 -2
  120. package/stack.md +371 -89
  121. package/string.gr +352 -557
  122. package/string.md +298 -255
  123. package/uint16.md +170 -170
  124. package/uint32.gr +25 -4
  125. package/uint32.md +249 -214
  126. package/uint64.gr +25 -5
  127. package/uint64.md +249 -214
  128. package/uint8.md +170 -170
  129. package/uri.gr +57 -53
  130. package/uri.md +88 -89
  131. package/wasi/file.gr +67 -59
  132. package/wasi/file.md +308 -308
  133. package/wasi/process.md +26 -26
  134. package/wasi/random.md +12 -12
  135. package/wasi/time.md +16 -16
  136. package/runtime/utils/printing.gr +0 -60
  137. 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
- { size: 0, buckets }
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 idx = getBucketIndex(key, buckets)
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 idx = getBucketIndex(key, buckets)
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 idx = getBucketIndex(key, buckets)
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,