From 927d6814f250c3120b8396c98cf43c576f5a5083 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 9 Jul 2019 11:09:46 +0100 Subject: [PATCH] slice_data_cast --- core/mem/mem.odin | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/mem/mem.odin b/core/mem/mem.odin index 47591437f..e5b79258c 100644 --- a/core/mem/mem.odin +++ b/core/mem/mem.odin @@ -129,6 +129,16 @@ slice_to_bytes :: inline proc "contextless" (slice: $E/[]$T) -> []byte { return transmute([]byte)s; } +slice_data_cast :: inline proc "contextless" ($T: typeid/[]$A, slice: $S/[]$B) -> T { + when size_of(A) == 0 || size_of(B) == 0 { + return nil; + } else { + s := transmute(Raw_Slice)slice; + s.len = (len(slice) * size_of(B)) / size_of(A); + return transmute(T)s; + } +} + buffer_from_slice :: inline proc(backing: $T/[]$E) -> [dynamic]E { s := transmute(Raw_Slice)backing;