diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-08-08 20:39:26 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-08-08 20:39:26 +0100 |
commit | b0456846292552c3136b40ba5077fe776cb1f71e (patch) | |
tree | c933ee96b48724c68388aeef66aa6e10ff324ef3 /src/gleam_stdlib.js | |
parent | 59b3954de6c3fe07398403592331e27496cd7811 (diff) | |
download | gleam_stdlib-b0456846292552c3136b40ba5077fe776cb1f71e.tar.gz gleam_stdlib-b0456846292552c3136b40ba5077fe776cb1f71e.zip |
bit_string.concat
Diffstat (limited to 'src/gleam_stdlib.js')
-rw-r--r-- | src/gleam_stdlib.js | 19 |
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); } |