aboutsummaryrefslogtreecommitdiff
path: root/src/gleam_stdlib.js
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-08-08 20:39:26 +0100
committerLouis Pilfold <louis@lpil.uk>2021-08-08 20:39:26 +0100
commitb0456846292552c3136b40ba5077fe776cb1f71e (patch)
treec933ee96b48724c68388aeef66aa6e10ff324ef3 /src/gleam_stdlib.js
parent59b3954de6c3fe07398403592331e27496cd7811 (diff)
downloadgleam_stdlib-b0456846292552c3136b40ba5077fe776cb1f71e.tar.gz
gleam_stdlib-b0456846292552c3136b40ba5077fe776cb1f71e.zip
bit_string.concat
Diffstat (limited to 'src/gleam_stdlib.js')
-rw-r--r--src/gleam_stdlib.js19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/gleam_stdlib.js b/src/gleam_stdlib.js
index 479b8a9..b63a4ea 100644
--- a/src/gleam_stdlib.js
+++ b/src/gleam_stdlib.js
@@ -189,6 +189,25 @@ export function bit_string_append(first, second) {
return array;
}
+function reduce_list(list, acc, f) {
+ let [current, next] = list;
+ while (next) {
+ acc = f(acc, current);
+ [current, next] = next;
+ }
+ return acc;
+}
+
+export function bit_string_concat(bit_strings) {
+ let size = reduce_list(bit_strings, 0, (size, b) => b.byteLength + size);
+ let array = new Uint8Array(size);
+ reduce_list(bit_strings, 0, (index, bit_string) => {
+ array.set(bit_string, index);
+ return index + bit_string.byteLength;
+ });
+ return array;
+}
+
export function log(term) {
console.log(term);
}