From: Lucas Bajolet Date: Sun, 29 Nov 2015 02:09:27 +0000 (-0500) Subject: lib/core: Added `join_bytes` top-level function to join an array of `Bytes` X-Git-Tag: v0.8~56^2 X-Git-Url: http://nitlanguage.org lib/core: Added `join_bytes` top-level function to join an array of `Bytes` Signed-off-by: Lucas Bajolet --- diff --git a/lib/core/bytes.nit b/lib/core/bytes.nit index 3f5bee8..439a621 100644 --- a/lib/core/bytes.nit +++ b/lib/core/bytes.nit @@ -612,3 +612,20 @@ redef class NativeString return new Bytes(self, len, len) end end + +# Joins an array of bytes `arr` separated by `sep` +# +# assert join_bytes(["String".to_bytes, "is".to_bytes, "string".to_bytes], ' '.ascii).hexdigest == "537472696E6720697320737472696E67" +fun join_bytes(arr: Array[Bytes], sep: nullable BytePattern): Bytes do + if arr.is_empty then return new Bytes.empty + sep = sep or else new Bytes.empty + var endln = sep.pattern_length * (arr.length - 1) + for i in arr do endln += i.length + var ret = new Bytes.with_capacity(endln) + ret.append(arr.first) + for i in [1 .. arr.length[ do + sep.append_to(ret) + ret.append arr[i] + end + return ret +end