lib/core: Added `join_bytes` top-level function to join an array of `Bytes`
authorLucas Bajolet <r4pass@hotmail.com>
Sun, 29 Nov 2015 02:09:27 +0000 (21:09 -0500)
committerLucas Bajolet <r4pass@hotmail.com>
Sun, 29 Nov 2015 02:18:27 +0000 (21:18 -0500)
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

lib/core/bytes.nit

index 3f5bee8..439a621 100644 (file)
@@ -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