From 6785a485e3cdb330f1df4124b2ae9a1c48faff31 Mon Sep 17 00:00:00 2001 From: Giuliano Macedo Date: Sun, 8 Dec 2024 16:20:09 -0300 Subject: [PATCH] docs: improved reinterpret docstring --- core/slice/slice.odin | 51 +++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/core/slice/slice.odin b/core/slice/slice.odin index c31edf281b5..66166bddb81 100644 --- a/core/slice/slice.odin +++ b/core/slice/slice.odin @@ -48,22 +48,41 @@ to_type :: proc(buf: []u8, $T: typeid) -> (T, bool) #optional_ok { } /* - Turn a slice of one type, into a slice of another type. - - Only converts the type and length of the slice itself. - The length is rounded down to the nearest whole number of items. - - ``` - large_items := []i64{1, 2, 3, 4} - small_items := slice.reinterpret([]i32, large_items) - assert(len(small_items) == 8) - ``` - ``` - small_items := []byte{1, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0} - large_items := slice.reinterpret([]i64, small_items) - assert(len(large_items) == 1) // only enough bytes to make 1 x i64; two would need at least 8 bytes. - ``` +Turn a slice of one type, into a slice of another type. + +Only converts the type and length of the slice itself. +The length is rounded down to the nearest whole number of items. + +Example: + + import "core:fmt" + import "core:slice" + + i64s_as_i32s :: proc() { + large_items := []i64{1, 2, 3, 4} + small_items := slice.reinterpret([]i32, large_items) + assert(len(small_items) == 8) + fmt.println(large_items, "->", small_items) + } + + bytes_as_i64s :: proc() { + small_items := [12]byte{} + small_items[0] = 1 + small_items[8] = 2 + large_items := slice.reinterpret([]i64, small_items[:]) + assert(len(large_items) == 1) // only enough bytes to make 1 x i64; two would need at least 8 bytes. + fmt.println(small_items, "->", large_items) + } + + reinterpret_example :: proc() { + i64s_as_i32s() + bytes_as_i64s() + } + +Output: + [1, 2, 3, 4] -> [1, 0, 2, 0, 3, 0, 4, 0] + [1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0] -> [1] + */ @(require_results) reinterpret :: proc "contextless" ($T: typeid/[]$U, s: []$V) -> []U {