mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Merge pull request #4568 from giuliano-macedo/master
docs: improved `slice.reinterpret` docstring
This commit is contained in:
+33
-14
@@ -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.
|
Turn a slice of one type, into a slice of another type.
|
||||||
|
|
||||||
Only converts the type and length of the slice itself.
|
Only converts the type and length of the slice itself.
|
||||||
The length is rounded down to the nearest whole number of items.
|
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]
|
||||||
|
|
||||||
```
|
|
||||||
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.
|
|
||||||
```
|
|
||||||
*/
|
*/
|
||||||
@(require_results)
|
@(require_results)
|
||||||
reinterpret :: proc "contextless" ($T: typeid/[]$U, s: []$V) -> []U {
|
reinterpret :: proc "contextless" ($T: typeid/[]$U, s: []$V) -> []U {
|
||||||
|
|||||||
Reference in New Issue
Block a user