Add a concat/tconcat function.

This commit is contained in:
Christoffer Lerno
2022-08-18 16:57:22 +02:00
parent b2a975945a
commit 656faa55bf

32
lib/std/core/array.c3 Normal file
View File

@@ -0,0 +1,32 @@
module std::core::array;
import std::core::mem::array;
macro tconcat(arr1, arr2)
{
var $Type = $typeof(arr1[0]);
$Type[] result = mem::array::talloc($Type, arr1.len + arr2.len);
if (arr1.len > 0)
{
mem::copy(result.ptr, &arr1[0], arr1.len * $Type.sizeof, $alignof($Type), $alignof($Type));
}
if (arr2.len > 0)
{
mem::copy(&result[arr1.len], &arr2[0], arr2.len * $Type.sizeof, $alignof($Type), $alignof($Type));
}
return result;
}
macro concat(arr1, arr2)
{
var $Type = $typeof(arr1[0]);
$Type[] result = mem::array::alloc($Type, arr1.len + arr2.len);
if (arr1.len > 0)
{
mem::copy(result.ptr, &arr1[0], arr1.len * $Type.sizeof, $alignof($Type), $alignof($Type));
}
if (arr2.len > 0)
{
mem::copy(&result[arr1.len], &arr2[0], arr2.len * $Type.sizeof, $alignof($Type), $alignof($Type));
}
return result;
}