diff --git a/alloc.d b/alloc.d index c5d256d..2448341 100644 --- a/alloc.d +++ b/alloc.d @@ -90,6 +90,14 @@ AllocCopy(T)(T[] target) return arr; } +T[] +AllocCopySlice(T)(T[] target, u64 start, u64 len) +{ + T[] arr = Alloc!(T)(len); + arr[0 .. $] = target[start .. start+len]; + return arr; +} + T[] AllocArray(T)(u64 count) { @@ -218,6 +226,14 @@ AllocCopy(T)(Arena* arena, T[] target) return arr; } +T[] +AllocCopySlice(T)(Arena* arena, T[] target, u64 start, u64 len) +{ + T[] arr = Alloc!(T)(arena, len); + arr[0 .. $] = target[start .. start+len]; + return arr; +} + T* Alloc(T)(Arena* arena) { @@ -330,6 +346,14 @@ ScratchAllocCopy(T)(T[] target) return arr; } +T[] +ScratchAllocCopySlice(T)(T[] target, u64 start, u64 len) +{ + T[] arr = ScratchAlloc!(T)(len); + arr[0 .. $] = target[start .. start+len]; + return arr; +} + unittest { {