mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-08 14:03:14 +00:00
Merge pull request #4568 from giuliano-macedo/master
docs: improved `slice.reinterpret` docstring
This commit is contained in:
@@ -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.
|
||||
The length is rounded down to the nearest whole number of items.
|
||||
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]
|
||||
|
||||
```
|
||||
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)
|
||||
reinterpret :: proc "contextless" ($T: typeid/[]$U, s: []$V) -> []U {
|
||||
|
||||
Reference in New Issue
Block a user