mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 16:18:52 +00:00
Make into_dynamic_soa more concise and remove builtin tag from it
This commit is contained in:
@@ -428,7 +428,7 @@ clear_soa :: proc{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Converts soa slice into a soa dynamic array without cloning or allocating memory
|
// Converts soa slice into a soa dynamic array without cloning or allocating memory
|
||||||
@(builtin, require_results)
|
@(require_results)
|
||||||
into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E {
|
into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E {
|
||||||
d: #soa[dynamic]E
|
d: #soa[dynamic]E
|
||||||
footer := raw_soa_footer_dynamic_array(&d)
|
footer := raw_soa_footer_dynamic_array(&d)
|
||||||
@@ -446,13 +446,9 @@ into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E {
|
|||||||
}
|
}
|
||||||
|
|
||||||
array := array
|
array := array
|
||||||
dynamic_data := uintptr(&d)
|
dynamic_data := ([^rawptr])(&d)[:field_count]
|
||||||
slice_data := uintptr(&array)
|
slice_data := ([^]rawptr)(&array)[:field_count]
|
||||||
for _ in 0..<field_count {
|
copy(dynamic_data, slice_data)
|
||||||
(^uintptr)(dynamic_data)^ = (^uintptr)(slice_data)^
|
|
||||||
dynamic_data += size_of(rawptr)
|
|
||||||
slice_data += size_of(rawptr)
|
|
||||||
}
|
|
||||||
|
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user