end
redef class NativeString
- # Creates a new `Bytes` object from `self` with `strlen` as length
- fun to_bytes: Bytes do
- var len = cstring_length
+ # Creates a new `Bytes` object from `self` with `len` as length
+ #
+ # If `len` is null, strlen will determine the length of the Bytes
+ fun to_bytes(len: nullable Int): Bytes do
+ if len == null then len = cstring_length
return new Bytes(self, len, len)
end
+
+ # Creates a new `Bytes` object from a copy of `self` with `len` as length
+ #
+ # If `len` is null, strlen will determine the length of the Bytes
+ fun to_bytes_with_copy(len: nullable Int): Bytes do
+ if len == null then len = cstring_length
+ var nns = new NativeString(len)
+ copy_to(nns, len, 0, 0)
+ return new Bytes(nns, 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